POJ1416 Shredding Company(dfs)
2013-08-23 15:05
381 查看
题目链接。
分析:
这题从早上调到现在。也不算太麻烦,细节吧。
每个数字都只有两种状态,加入前一序列和不加入前一序列。DFS枚举。
分析:
这题从早上调到现在。也不算太麻烦,细节吧。
每个数字都只有两种状态,加入前一序列和不加入前一序列。DFS枚举。
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <set> #include <string> #include <queue> using namespace std; int ord[10], len, ans_a[10], tar, max_ans, cnt; char s[10]; bool flag; void dfs(int cur_s, int cur_t, int cur) { if(cur_s+cur_t > tar) { // error return ; } else if(cur == len) { // int t = cur_s + cur_t; if(t > tar) return ; else if(t > max_ans) { cnt = 1; max_ans = t; memcpy(ans_a, ord, sizeof(ord)); } else if(t == max_ans) { cnt++; } flag = true; return ; } ord[cur] = 1; dfs(cur_s+cur_t+s[cur]-'0', 0, cur+1); if(cur != len-1) { ord[cur] = 0; dfs(cur_s, (cur_t+s[cur]-'0')*10, cur+1); } } int main() { int n; // freopen("my.txt", "r", stdin); while(scanf("%d %d", &tar, &n) == 2 && (n | tar)) { flag = false; max_ans = 0; cnt = 0; sprintf(s, "%d", n); len = strlen(s); dfs(0, 0, 0); if(!flag) printf("error\n"); else if(cnt >= 2) printf("rejected\n"); else { printf("%d", max_ans); int sn=0; for(int i=0; i<len; i++) { if(ans_a[i] == 1) { printf(" %d", sn*10+s[i]-'0'); sn = 0; } else { sn = sn*10+s[i]-'0'; } } putchar('\n'); } } return 0; }
相关文章推荐
- POJ 1416 DFS
- (水)POJ-1416 DFS技巧
- poj 1416 DFS
- poj1416 Shredding Company dfs 记录路径
- POJ1416 DFS+剪枝
- POJ - 1416 Shredding Company解题报告(dfs)
- poj 1416 Shredding Company dfs
- POJ 1416-Shredding Company(DFS+更新路径)
- POJ 1416 Shredding Company 回溯搜索 DFS
- poj 1416 Shredding Company (DFS)
- POJ 1416 Shredding Company <DFS>
- poj 1416 Shredding Company(DFS减枝)
- POJ1416--DFS入门
- poj_1416 Shredding Company(dfs)
- poj-1416-Shredding Company-dfs
- POJ 1416 Shredding Company 整数的切割问题DFS
- POJ 1416 Shredding Company(DFS + 打印最优解)
- poj-1416 Shredding Company 按位DFS+入门剪枝
- poj 1416 Shredding Company( dfs )
- poj 1416 Shredding Company(dfs)