POJ - 1011 剪枝练习
题意:给定n条拆掉的棍子,问能凑成最短的多条相同长度棍子的最短长度
x:当前第几条正在合成的棍子
y:目前正在尝试的拆掉的棍子
z:当前长度
剪枝方案:
1.按照长度单调性排序,减少重复搜索
2.如果当前拼接棍子失败,那接下来相同长度也会失败
3.第一条棍子就失败就不必搜索了
/*H E A D*/
int a[666],tot,ans,sum,n;
bool used[666];
bool dfs(int x,int y,int z){
if(x==tot+1) return 1;
if(z==sum/tot) return dfs(x+1,1,0);
if(y==n+1) return 0;
int failed=0;//!!!
rep(i,y,n){
if(!used[i]&&z+a[i]<=sum/tot&&failed!=a[i]){
used[i]=1;
if(dfs(x,y+1,z+a[i])) return 1;
failed=a[i];
used[i]=0;
if(z==0)return 0;//!!!
}
}
return 0;
}
int main(){
while(~iin(n)){
if(n==0)break;
rep(i,1,n) a[i]=read();
sort(a+1,a+1+n,greater<int>());
sum=0;
rep(i,1,n) sum+=a[i];
ll ans=oo;
rrep(i,sum,1){
if(sum%i==0){
tot=i;
memset(used,0,sizeof used);
if(dfs(1,1,0)){
ans=min(ans,(ll)sum/tot);
break;
}
}
}
println(ans);
}
return 0;
}
int main(){
while(~iin(n)){
if(n==0)break;
rep(i,1,n) a[i]=read();
sort(a+1,a+1+n,greater<int>());
sum=0;
rep(i,1,n) sum+=a[i];
ll ans=oo;
rrep(i,sum,1){
if(sum%i==0){
tot=i;
flag=0;
memset(used,0,sizeof used);
if(dfs(1,1,0)){
ans=min(ans,(ll)sum/tot);
break;
}
}
}
println(ans);
}
return 0;
}
POJ - 1011 剪枝练习的更多相关文章
- DFS(剪枝) POJ 1011 Sticks
题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...
- 搜索+剪枝——POJ 1011 Sticks
搜索+剪枝--POJ 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0 ...
- POJ 1011 Sticks 【DFS 剪枝】
题目链接:http://poj.org/problem?id=1011 Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissio ...
- POJ 1011 - Sticks DFS+剪枝
POJ 1011 - Sticks 题意: 一把等长的木段被随机砍成 n 条小木条 已知他们各自的长度,问原来这些木段可能的最小长度是多少 分析: 1. 该长度必能被总长整除 ...
- OpenJudge 2817:木棒 / Poj 1011 Sticks
1.链接地址: http://bailian.openjudge.cn/practice/2817/ http://poj.org/problem?id=1011 2.题目: 总时间限制: 1000m ...
- poj 1011 Sticks (DFS+剪枝)
Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 127771 Accepted: 29926 Descrip ...
- Sticks POJ - 1011 少林神棍 dfs四次剪枝
http://poj.org/problem?id=1011 题意:若干根棍子被截成小段的木棒,现在给你这些木棒,问最短可以拼出的棍子长度. 题解:搜索,dfs(r,m) 二个参数分别代表还剩r个木棒 ...
- POJ 1011 Sticks(dfs+剪枝)
http://poj.org/problem?id=1011 题意:若干个相同长度的棍子被剪成若干长度的小棍,求每根棍子原来的可能最小长度. 思路:很经典的搜索题. 我一开始各种超时,这题需要很多剪枝 ...
- POJ 1011 Sticks dfs,剪枝 难度:2
http://poj.org/problem?id=1011 要把所给的集合分成几个集合,每个集合相加之和ans相等,且ans最小,因为这个和ans只在[1,64*50]内,所以可以用dfs一试 首先 ...
随机推荐
- GNU 和 g++(转)
百度知道 GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.Richard Stallman最早是在net.unix ...
- 1.ef 映射关系
1.edmx <?xml version="1.0" encoding="utf-8"?><edmx:Edmx Version="3 ...
- MVC 知识点随笔
1.https://msdn.microsoft.com/zh-cn/gg981918 <text></text> 等同于 @:
- Python基础入门-函数实战登录功能
''' 函数实战: .加法计算器 .过滤器 .登录功能实战 ''' def add(a,b): return a+b def login_order(): return 'asdfasdfdasfad ...
- 《架构师杂志》评述:Scott Guthrie
发布日期: 2007-03-29 | 更新日期: 2007-03-29 Scott Guthrie 是 Microsoft 开发事业部的总经理.他领导着负责构建 CLR(公共语言运行库).ASP. ...
- 史融资2.5亿的“自主国产”红芯浏览器,其实是个套壳Chrome
红芯浏览器 今天早上看到朋友发的浏览器图片,感觉很好奇,然后就看了下,感觉文章还不错,就转发了下,然后下载浏览器着实花了不小心思,最后文末添加了红芯浏览器转存在蓝奏云盘的下载连接了. 文章原文 今天又 ...
- 平方十位数——第八届蓝桥杯JavaB组(国赛)第一题
原创 标题:平方十位数 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字.这其中也有很多恰好是平方数(是某个数的平方). 比如:1026753849,就是其中最小的一个平方数. 请你找出其中 ...
- XE中FMX操作ListBox,添加上千条记录(含图片)
我之前是想在ListBox的每个Item上添加一个图片,Item上所有的内容都是放在Object里赋值,结果发现加载一百条记录耗时四五秒: procedure TMainForm.AddItem; v ...
- .NET和C#的版本历史
维基百科页面:https://en.wikipedia.org/wiki/.NET_Framework_version_history Versionnumber CLRversion Release ...
- intellij idea 15,webstorm 最新注册破解
http://idea.lanyus.com 在激活地址填写上上面的地址就行了,非常简单有效. 亲测idea,webstorm...都可以激活