hdoj 1455 Sticks 【dfs】
2017-04-27 10:52
316 查看
题意:找最短的木棍可以组成的长度,
hdoj 1518 的加强版
代码:
#include <stdio.h> #include <string.h> #include <algorithm> using std::sort; #define M 70 int s[M], vis[M]; int n, ans; int cmp(int a, int b) { return a > b; } int dfs(int cou, int cur, int pos) { if(cou == n) return 1; int i; for(i = pos; i < n; i ++){ if(vis[i]) continue; if(cur+s[i] < ans){ vis[i] = 1; if(dfs(cou+1, cur+s[i], i+1)) return 1; vis[i] = 0; if(cur == 0) return 0; while(s[i] == s[i+1]&&i+1<n) ++i; } else if(cur+s[i] == ans){ vis[i] = 1; if(dfs(cou+1, 0, 0)) return 1; vis[i] = 0; return 0; } } return 0; } int main() { int i, j; while(scanf("%d", &n), n){ int sum = 0; for(i = 0; i < n; i ++){ scanf("%d", &s[i]); sum+=s[i]; } sort(s, s+n, cmp); for(i = n; i > 0; i --){ if(sum%i == 0&&(sum/i) >= s[0]){ ans = sum/i; memset(vis, 0, sizeof(vis)); if(dfs(0, 0, 0)){ printf("%d\n", ans); break; } } } } return 0; }
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1455
相关文章推荐
- hdoj 1455 && nyoj 293 && poj 1110 Sticks 【DFS + 剪枝 + 剪枝 + 剪枝 + 。。。+ 剪枝】
- hdoj 1455 Sticks 【dfs】
- hdoj1455 poj1011 nyoj293 Sticks【DFS+剪枝】
- [DFS+剪枝]POJ 1011/HDOJ 1455/HOJ 1049 Sticks
- 【HDOJ】1455 Sticks
- (step4.3.10)hdu 1455(Sticks——DFS)
- HDOJ1455 (DFS+剪枝优化)和 HDOJ1518可做类比
- hdu 1455 Sticks(经典DFS)
- hdu 1455 Sticks 【dfs剪枝】
- HDU_1455 && POJ_1011 Sticks (dfs)
- HDOJ 1455 Sticks
- poj 1011 hdoj 1455 Sticks(搜索+剪枝)
- 【DFS】hdu 1455 Sticks
- hdu 1455/poj 1011 Sticks(DFS剪枝神题)
- HDU 1455 Sticks(dfs+强剪枝)
- poj 1011 hdoj 1455 Sticks(搜索+剪枝)
- HDU--1455 -- Sticks [DFS] [剪枝优化]
- hdu 1455 Sticks(dfs+可行性剪枝)
- (step4.3.10)hdu 1455(Sticks——DFS)
- HDU 1455 Sticks(DFS,剪枝,原来木棒的至少长度)