1442:【例题3】小木棍
2022/7/12 23:25:23
本文主要是介绍1442:【例题3】小木棍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1442:【例题3】小木棍
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 5752 通过数: 1346
【题目描述】
乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50。现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。给出每段小木棍的长度,编程帮他找出原始木棍的最小可能长度。
【输入】
第一行为一个单独的整数N表示砍过以后的小木棍的总数,其中N≤60,第二行为N个用空个隔开的正整数,表示N根小木棍的长度。
【输出】
仅一行,表示要求的原始木棍的最小可能长度。
【输入样例】
9 5 2 1 5 2 1 5 2 1
【输出样例】
6 解析见源码注释
#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD = 1E9+7; const int N = 1000+5; const int dx[] = {-1,1,0,0,-1,-1,1,1}; const int dy[] = {0,0,-1,1,-1,1,-1,1}; using namespace std; int a[N]; bool vis[N]; int cnt; bool cmp(int x,int y){ return x>y; } bool dfs(int k,int step,int rest,int len){ //k为已经拼接好的个数,step为上一个的编号,rest为剩余的长度,len为木棍的长度 if(k==cnt+1 && rest==0)//拼接好个数为要求数且无剩余 return true; else if(k==cnt+1)//拼接好个数为要求数但有剩余 return false; else if(rest==0){//拼接好个数不为要求数但无剩余,重新开始 rest=len;//剩余数变为长度 step=0;//编号归零 } for(int i=step+1;i<=cnt;i++){ if(!vis[i]){ if(rest-a[i]>=0){//保证剩余值不为负数 vis[i]=true; if(dfs(k+1,i,rest-a[i],len)) return true; vis[i]=false; if(a[i]==rest || len==rest)//头尾剪枝,此时已在回溯之后,需要判断头尾两种情况 break; while(a[i]==a[i+1])//去重剪枝,用当前长度搜索无结果时,对同样长度的可以忽略 i++; } } } return 0; } int main(){ int n; scanf("%d",&n); int sum=0; for(int i=1;i<=n;i++){ int x; scanf("%d",&x); if(x<=50){ a[++cnt]=x; sum+=x; } } sort(a+1,a+1+cnt,cmp); for(int i=a[1];i<=sum;i++){ if(sum%i==0){ if(dfs(1,0,i,i)){ printf("%d\n",i); break; } } } return 0; }
这篇关于1442:【例题3】小木棍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27JavaScript面试真题详解与解答
- 2024-12-27掌握JavaScript大厂面试真题:新手入门指南
- 2024-12-27JavaScript 大厂面试真题详解与解析
- 2024-12-26网络攻防资料入门教程
- 2024-12-26SQL注入资料详解:入门必读教程
- 2024-12-26初学者指南:数据库服务漏洞项目实战
- 2024-12-26网络安全项目实战:新手入门指南
- 2024-12-26网络攻防项目实战入门教程
- 2024-12-26信息安全项目实战:从入门到初步应用
- 2024-12-26SQL注入项目实战:初学者指南