OpenJudge13 Sticks
来源:互联网 发布:win10 休眠不关闭网络 编辑:程序博客网 时间:2024/06/08 16:35
题目:http://noi.openjudge.cn/ch0407/13/
分析:搜索+强剪枝.
代码:
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=70;int n,a[Tmax],ss;bool v[Tmax],ok;bool cmp(int l,int r){ return l>r;}bool dfs(int x,int num,int aim,int now){ if(num==n&&aim==now) return true; int i; if(now==0) { for(i=1;i<=n;i++) if(!v[i]){ v[i]=true; if(dfs(i,num+1,aim,a[i])) return true; else { v[i]=false; return false; } v[i]=false; } return false; } if(aim==now) if(dfs(0,num,aim,0)) return true; else return false; for(i=x+1;i<=n;i++) if(a[i]<=aim-now&&!v[i]&&((a[i-1]==a[i]&&v[i-1]==true)||(a[i-1]!=a[i]))){ v[i]=true; if(dfs(i,num+1,aim,now+a[i])) return true; v[i]=false; } return false;}int main(){ int i; while(scanf("%d",&n)==1&&n!=0) { ss=0; for(i=1;i<=n;i++) { scanf("%d",&a[i]); ss+=a[i]; } sort(a+1,a+1+n,cmp); for(i=a[1];i<=ss;i++) { if(ss%i!=0) continue; memset(v,0,sizeof(v)); if(dfs(0,0,i,0)){ printf("%d\n",i); break; } } } return 0;}
0 0
- OpenJudge13 Sticks
- Sticks
- sticks
- sticks
- sticks
- Sticks
- sticks
- Sticks
- Sticks
- Sticks
- Sticks
- Sticks
- Sticks
- Sticks
- Sticks
- Sticks
- sticks
- Sticks
- 第十周项目1-“知原理”检验题目
- 第十周实践项目1—二叉树算法库
- 怎样理解阻塞非阻塞与同步异步的区别?
- CoreData
- 第十周 项目1 二叉树算法库
- OpenJudge13 Sticks
- C++基础——类模板
- 第9周 项目2 - 对称矩阵压缩存储的实现与应用
- UML——用例图
- 第4周项目3 -- 单链表应用(3)
- 第九周项目2-对称矩阵的压缩存储实现与应用
- 第十周 项目一 二叉树算法库
- 第九周 项目二(1)-压缩形式存储对称矩阵基本运算
- 第10周 项目1 - 二叉树算法库