码迷,mamicode.com
首页 > 其他好文 > 详细

小木棒HDU1455(DFS+剪枝)

时间:2019-12-05 22:28:48      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:tar   include   tps   pos   eof   输入   scanf   size   ret   

题意:HDU1455

给出n个小木棒的长度,他们是又数根长度相同的木棒剪短得来的,问没剪短之前的木棒长度最短是多少.

思路:

见代码:https://www.cnblogs.com/fqfzs/p/9911110.html参考自

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 70;
 4 const int INF = 0x3f3f3f3f;
 5 int n, sumv, target, aim;//target表示目标的棍子个数,aim表示目标的棍子长度,sumv为所有木棍总长度 
 6 int stick[maxn], vis[maxn];//vis数组标记 ,stick存储输入的木棒长度 
 7 bool cmp(int a, int b) {
 8     return a > b;
 9 }
10 bool dfs(int cnt, int len, int pos) {
11     if(cnt == target) return true;//根数对上就返回 退出dfs
12     if(len == aim) return dfs(cnt+1, 0, 0); //当拼完一根后,继续拼下一根
13     for(int i = pos; i < n; i++) {//从大到小排序后,按顺序搜索
14         if(!vis[i] && len+stick[i] <= aim) {
15             vis[i] = 1;
16             if(dfs(cnt, len+stick[i], i+1)) return true;
17             vis[i] = 0;                         //只有失败才会运行到下面,否则是直接返回的
18             if(len == 0) return false;                     //如果第一根时失败  剪枝
19             while(i+1 < n && stick[i+1] == stick[i]) i++;  //如果下一根长度跟当前的失败的长度一样,剪枝
20         }
21     }
22     return false;
23 }
24 int main() {
25     while(~scanf("%d", &n), n) {
26         sumv = 0;
27         for(int i = 0; i < n; i++) {
28             scanf("%d",&stick[i]);
29             sumv += stick[i];
30         }
31         sort(stick, stick+n, cmp);
32         int ans = 0;
33         for(int i = stick[0]; i <= sumv; i++) {//拼好后的木棒长度只会在stick[0]和总长度之间 
34             if(sumv % i == 0) {
35                 memset(vis, 0, sizeof(vis));
36                 aim = i;
37                 target = sumv / aim;
38                 if(dfs(0, 0, 0)) {
39                     ans = aim;
40                     break;
41                 }
42             }
43         }
44         printf("%d\n",ans);
45     }
46     return 0;
47 }

 

小木棒HDU1455(DFS+剪枝)

标签:tar   include   tps   pos   eof   输入   scanf   size   ret   

原文地址:https://www.cnblogs.com/--HPY-7m/p/11992028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!