POJ-1011-Sticks
来源:互联网 发布:影视制作软件 编辑:程序博客网 时间:2024/05/16 14:52
DFS超级经典的一个题,需要N多剪枝才行,具体看代码吧~剪枝都在return中~
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=65;int n,a[maxn],sum[maxn];bool vis[maxn],getans;void DFS(int res,int now,int val,int st){ if(res==val||getans) {getans=1;return; } int last=-1; for(int i=st;i>=1;i--) {if(!vis[i]){ if(a[i]==last)continue; if(now+a[i]<val) {vis[i]=1;DFS(res-a[i],now+a[i],val,i-1);if(getans) return;vis[i]=0;last=a[i]; } else if(now+a[i]==val) {vis[i]=1;DFS(res-a[i],0,val,n);if(getans) return;vis[i]=0;last=a[i]; } if(!now)return;} }}int main(){ while(scanf("%d",&n)&&n) {getans=0;for(int i=1;i<=n;i++){ scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i];}sort(a+1,a+n+1);for(int i=n;i>=1;i--){ if(sum[n]%i==0) {if(sum[n]/i<a[n]) continue;memset(vis,0,sizeof(vis));DFS(sum[n],0,sum[n]/i,n);if(getans){ printf("%d\n",sum[n]/i); break;} }} } return 0;}
- poj 1011-sticks
- POJ 1011 Sticks
- poj 1011 Sticks
- poj 1011 Sticks
- POJ 1011 Sticks
- poj 1011 Sticks
- POJ 1011 Sticks
- poj 1011 sticks
- POJ 1011 Sticks
- poj 1011 sticks
- POJ 1011 Sticks
- POJ 1011: Sticks
- poj 1011 Sticks
- poj 1011 Sticks【dfs】
- hdu1455 poj 1011 sticks
- poj 1011 Sticks
- POJ 1011 Sticks
- POJ 1011 Sticks
- android 各个存储路径的解释
- 各种多媒体格式以及codec简析
- Eclipse快捷键 10个最有用的快捷键
- vsftpd的使用
- JSON解析请求服务器端的服务时,需要提供一个请求的URL,注意点。
- POJ-1011-Sticks
- 解决删除windows用户时提示“用户不属于此组”的错误
- Servlet创建过滤器
- UVA 253 - Cube painting(立方体涂色)
- VC图形绘制双缓存的代码复用性讨论
- html标签meta
- 电信光猫破解 (打开无线wifi及路由功能)
- js获取url参数值
- Java中Split函数的用法 注意点