POJ 1011 木棒问题
来源:互联网 发布:js数据类型转换函数 编辑:程序博客网 时间:2024/05/01 22:11
剪枝1:
剪枝2:
剪枝3:
剪枝4:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int len[100];
int Length,n;
bool use[100];
bool cmp(int a,int b)
{ return a>b; }
bool dfs(int Notused,int NLeft,int preno/*剪枝4*/)
{
if(Notused==0&&NLeft==0)
return true;
if(NLeft==0)
{
NLeft=Length;
preno=0;
}
if(preno!=0)
preno+=1;
int i;
for(i=preno;i<n;i++)
{
if(i>0&&use[i-1]==false&&len[i]==len[i-1])
continue;//剪枝3
if(!use[i]&&len[i]<=NLeft)
{
use[i]=true;
if(dfs(Notused-1,NLeft-len[i],i))
return true;
else
{
use[i]=false;
if(NLeft==len[i]||Length==NLeft)
return false;//剪枝2 剪枝1
}
}
}
return false;
}
int main()
{
//int n;
int i,sum;
while(scanf("%d",&n)&&n)
{
memset(len,0,sizeof(len));
for(i=sum=0;i<n;i++)
{
scanf("%d",&len[i]);
sum+=len[i];
}
sort(len,len+n,cmp);
for(i=len[0];i<=sum;i++)
{
if(sum%i!=0) continue;
memset(use,false,sizeof(use));
//printf("%d\n",i);
Length=i;
if(dfs(n,i,0))
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
- POJ 1011 木棒问题
- poj 1011 回溯+剪枝 木棒问题
- poj 1011 木棒
- poj 1011 木棒
- POJ 1011 重组木棒
- POJ 1011木棒
- POJ 1011 木棒
- POJ 1011 (木棒)
- POJ 1011 木棒 中文
- 解题报告 poj 1011 木棒
- poj 木棒
- 木棒问题
- 木棒问题
- 木棒问题
- 木棒问题
- 木棒问题
- POJ-2817:木棒
- poj 1011 sticks(木棒) (dfs+剪枝)
- Unix中find用法
- sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
- 轻松使用jquery解析XML
- [vs 2005]vector的默认构造流程
- PKU 1723 SOLDIERS
- POJ 1011 木棒问题
- Unix显示当前目录pwd
- 微博内容过滤
- batis 文件要点
- [vs 2005]vector的单参数构造流程
- 一些软件设计的原则
- 我编程,我快乐--节选
- 各城市多少月薪相当于北京5000元
- Linux内核设计与实现 摘录