首页 > 编程语言 >木棒(c++实现)

木棒(c++实现)

时间:2024-04-11 13:01:00浏览次数:24  
标签:木棒 样例 len 实现 int c++ 木棍 长度

题目


乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 50 个长度单位。

然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。

请你设计一个程序,帮助乔治计算木棒的可能最小长度。

每一节木棍的长度都用大于零的整数表示。


输入


输入包含多组数据,每组数据包括两行。

第一行是一个不超过 64 的整数,表示砍断之后共有多少节木棍。

第二行是截断以后,所得到的各节木棍的长度。

在最后一组数据之后,是一个零。


输出


为每组数据,分别输出原始木棒的可能最小长度,每组数据占一行。


样例


输入样例:
9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
0


输出样例:
6
5


代码


#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 77;
int n;
int w[N];
bool st[N];
int len,sum;

bool dfs(int u,int cur,int start){
    if(u*len == sum) return true;
    if(cur==len) return dfs(u+1,0,0);
    
    for(int i=start;i<n;i++){
        if(st[i]) continue;
        
        if(cur + w[i] <= len){
            st[i] = true;
            if(dfs(u,cur+w[i],i+1)) return true;
            st[i] = false;
        }
        if(!cur || cur+w[i]==len) return false;
        
        int j=i+1;
        while(j<n && w[i] == w[j])j++;
        i=j-1;
    }
    return false;
}

int main(){
    while(cin>>n,n){
        sum = len = 0;
        for(int i=0;i<n;i++) {
            scanf("%d",&w[i]);
            sum += w[i];
            len = max(len,w[i]);
        }
        
        sort(w,w+n);
        reverse(w,w+n);
        memset(st,false,sizeof st);
        
        while(1){
            if(sum % len == 0 && dfs(0,0,0)){
                printf("%d\n",len);
                break;
            }
            len++;
        }
    }
}

标签:木棒,样例,len,实现,int,c++,木棍,长度
From: https://blog.csdn.net/zyang654321/article/details/137634984

相关文章

  • 【C++】gcd函数的写法
    ......
  • 【华为OD】2024年华为OD机试C卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
    【华为OD】2024年C卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客华为OD机试2024年C卷真题题集题库,有2种分数的题目列表,分别是100分的列表、200分的列表需要订阅请看链接:C卷100......
  • consul:啥?我被优化没了?AgileConfig+Yarp替代Ocelot+Consul实现服务发现和自动网关配置
    现在软件就业环境不景气,各行各业都忙着裁员优化。作为一个小开发,咱也不能光等着别人来优化咱,也得想办法优化下自己。就拿手头上的工作来说吧,我发现我的微服务应用里,既有AgileConfig这个配置中心组件,又有一个Consul服务发现组件。本来吧他俩也没啥事,各干个的。但是,我在操作AgileCo......
  • golang实现R6900路由器外网IP更新通知程序
    程序一分钟执行一次,检测路由器外网IP地址变更则自动发送邮件,使用网易126smtp协议发送邮件,邮箱地址及授权码请自行替换,getIp函数中的grep根据自己的网卡信息调试替换R6900路由器的交叉编译语句:CGO_ENABLED=0GOOS=linuxGOARCH=armGOARM=5gobuildxxxx.go1234567......
  • ssm基于SpringMVC网上选课系统的设计与实现论文
    摘要随着课程的增多,学生的选择性越来越大。现在大多数学校选课的方式采用学生上报给老师,老师负责整理。这种方式效率低、灵活性低,每门课程的选报人数有限就给老师的统计整理工作造成困难。目前,网络发展成熟,各类管理系统层出不穷,如果可以有专业的管理系统提供网上选课,则可......
  • 【C++】深入理解 C++ 中的 auto 关键字
    深入理解C++中的auto关键字1.概念2.用法2.1基本用法2.2结合复杂类型2.3函数返回类型推导2.4使用auto处理复杂类型3.注意事项4.适用场景在C++11标准中引入了auto关键字,它是一项强大的特性,可以大大简化代码的书写,同时提高代码的可读性和灵活性。......
  • 【C++】C++入门
    C++入门什么是缺省参数?缺省参数的语法示例:使用缺省参数注意事项什么是函数重载?函数重载的语法示例:使用函数重载注意事项什么是引用?引用的语法引用的特点示例:使用引用注意事项什么是内联函数?内联函数的优势内联函数的语法示例:使用内联函数注意事项什么是缺省参数......
  • 【附源码】JAVA计算机毕业设计小型家政服务管理系统的设计与实现(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的快速发展和人们生活节奏的加快,家政服务行业应运而生,并迅速发展壮大。越来越多的家庭开始聘请家政人员来帮助处理家庭日常事务,如清洁、烹饪、......
  • 人工智能_大模型030_大模型开发框架003_Semantic Kernel中Native Function嵌套调用_SK
    ###4.2、NativeFunction嵌套调用(选)**注意:**NativeFunction的嵌套调用,本质上就是函数嵌套。官方给的写法是在Kernel的设计思想下的实现,通过Kernel来获取函数并执行,观感上较为晦涩。实际开发中,可以根据个人对SK内核与设计理念的理解,自行选择使用以下写法,或使用普......
  • Django ModelSerializer 中如何实现自定义验证
    随着Web开发的日益复杂化,对数据验证的需求也日益增加。DjangoRESTframework提供了一套强大的、灵活的验证系统,帮助开发者轻松处理各种复杂情况。本文将重点探讨DjangoModelSerializer中如何实现自定义验证。1.简介DjangoModelSerializer不仅简化了序列化过程,还内建了......