OpenJudge13 Sticks
2015-11-02 16:21
323 查看
题目: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; }
相关文章推荐
- linux find 命令忽略某个或多个子目录的方法
- PowerShell入门(一):PowerShell能干什么?
- shell 使用printf
- tomcat 访问日志中获取获取客户端的RIP和客户端agent的简单实现
- linux 下mysql 备份数据库
- linux中常用命令
- Tomcat自带log的配置
- shell script 之test
- 希尔排序
- OpenCV学习:fastAtan2函数解密
- uboot---linux
- 在CentOS 7 上安装 icinga2
- CentOS更改yum源与更新系统
- nginx日志模块分析详解
- CentOS6.3下修复yum安装工具(转)
- PowerShell入门(序):为什么需要PowerShell?
- tomcat启动的内存溢出解决
- linux挂载共享文件夹
- OpenGL ES2.0入门详解
- 【学神】Linux基本文件管理