hdu1455
来源:互联网 发布:java 时间格式 cst 编辑:程序博客网 时间:2024/05/29 16:40
/*
分析:
DFS枝剪经典。
2013-03-03
*/
分析:
DFS枝剪经典。
2013-03-03
*/
#include"stdio.h"#include"string.h"#include"stdlib.h"#define N 111int n,ans;int aim,ok;int len[N],flag[N];int cmp(const void *a,const void *b){return *(int *)a-*(int *)b;}void dfs(int now,int finish,int pre){if(finish==aim){ans=1;return ;}if(ans)return ;int i,j;for(i=pre+1;i<n;i++){if(flag[i])continue;if(now+len[i]>ok)continue;flag[i]=1;if(now+len[i]==ok)dfs(0,finish+1,-1);elsedfs(now+len[i],finish,i);flag[i]=0;if(ans)return ;/*这一个很重要,如果以当前这根作为第一根,然后从还某有用过的木头中来找出合适的,来和它组成一个完整的,失败了,那么就这种组合方法坑定会失败(因为剩下的还没有用过的木头中,已经确定这一根无法和其它的组成有效组合),直接return掉*/if(!now)return ;/*长度相同的没有必要进行重复dfs。*/for(j=i+1;j<n;j++)if(len[j]!=len[j-1])break;i=j-1;}}int main(){int i;int max,sum;while(scanf("%d",&n),n){max=sum=0;for(i=0;i<n;i++){scanf("%d",&len[i]);sum+=len[i];if(len[i]>max)max=len[i];}qsort(len,n,sizeof(int),cmp);for(i=n;i>=2;i--){ans=0;if(sum%i)continue;if(sum/i<max)continue;aim=i;ok=sum/i;memset(flag,0,sizeof(flag));dfs(0,0,-1);if(ans)break;}printf("%d\n",sum/i);}return 0;}
- hdu1455
- hdu1455
- HDU1455
- hdu1455
- hdu1455
- HDU1455
- hdu1455
- HDU1455(DFS)
- Hdu1455 Sticks
- POJ1011 HDU1455 Sticks
- hdu1455 poj 1011 sticks
- HDU1455-经典DFS剪枝
- 【深搜加剪枝】【HDU1455】【Sticks】
- HDU1455 POJ1011 Sticks 搜索
- hdu1455 Sticks ----DFS
- HDU1455&&POJ1011-Sticksa
- HDU1455 Sticks(DFS+剪枝)
- hdu1455 Sticks 深搜 强剪枝
- 常用的Linux快捷键 [译]
- android2.0以后获取Email
- hdu 1698 成段改变值
- mysql 索引背后的数据结构和算法原理(zz)
- Ubuntu下vi编辑器使用难解决
- hdu1455
- poj 1273 Drainage Ditches(最大费用流+最短增广路径算法)
- 【有趣的面试题】有人邀请ABCDEF六人参加一项会议
- A. Nearly Lucky Number
- poj1942 Paths on a Grid
- poj2038
- android数据存储二
- Bazaar版本管理工具 Ubuntu
- VxWorks Booting Process