杭电--1258 深度搜索(sum it up)
2013-06-22 23:38
260 查看
DFS还是不太懂,递归是个硬伤啊。。。。
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1258
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1258
#include <iostream> #include <vector> #include <algorithm> #include <iterator> #include <cstdio> using namespace std; vector<int> digits(13); //出现的数字 vector<int> digits_num(13); //对应的个数 int m = 0; //digits中具体有m个数 vector<int> f(13); //遍历搜索时候取得digits的数目 bool out = false; //如果out是true说明有输出项 int sum; void DFS(int start); int main() { int n; while(cin >> sum >> n) { out = false; m = 0; if(sum ==0 && n==0) break; //输入值,并初始化digits和digits_num数组 for(int i=0; i<n; i++) { if(i == 0) { cin >> digits[m]; digits_num[m] = 1; m++; } else { int k; cin >> k; if(k == digits[m-1]) { digits_num[m-1]++; } else { digits[m] = k; digits_num[m] = 1; m++; } } } // 测试,输出digits和digits_num数组 // copy(digits.begin(), digits.end(), ostream_iterator<int>(cout, "\t")); // cout << endl; // copy(digits_num.begin(), digits_num.end(), ostream_iterator<int>(cout, "\t")); // 深度搜索 cout << "Sums of " << sum << ":" << endl; DFS(0); if(out == false) cout << "NONE" << endl; } return 0; } void DFS(int start) { int tot = 0; // cout << "s=" << s << endl; // cout << "m=" << m << endl; //计算和tot // cout << "start:" << endl; for(int i=0; i<m; i++) { if(f[i] != 0) tot = tot + digits[i] * f[i]; // cout << "f[" << i << "]=" << f[i] << endl; } // cout << "tot=" << tot << endl; // cout << "end:" << endl << endl; // getchar(); // getchar(); //剪枝 if(tot > sum) return; //打印结果 if(tot == sum) { int flag = true; for(int i=0; i<m; i++) { if(f[i] != 0 && flag) { flag = false; for(int j=0; j<f[i]; j++) { if(j == 0) cout << digits[i]; else cout << "+" << digits[i]; } } else { if(f[i] != 0) { for(int j=0; j<f[i]; j++) cout << "+" << digits[i]; } } } cout << endl; out = true; return ; } for(int i=start; i<m; i++) { for(int j=digits_num[i]; j>0; j--) { f[i] = j; DFS(i+1); } f[i] = 0; } } /* 4 6 4 3 2 2 1 1 */
相关文章推荐
- 杭电1258 Sum it Up DFS 搜索
- 杭电 搜索 1258 Sum It Up
- 杭电1258 Sum It Up
- 杭电 HDU 1258 Sum It Up
- hdu 1258 Sum It Up 搜索
- hdu 1258 Sum It Up 搜索
- HDU 1258 Sum it up 搜索DFS
- Sum It Up POJ 1564 HDU 杭电1258【DFS】
- Poj 1564 || HDU 1258 Sum It Up(dfs+技巧)
- HDU 1258 Sum It Up(DFS)
- hdoj 1258 Sum It Up【DFS】
- HDU 1258 Sum It Up (dfs)
- HDU 1258 Sum It Up (dfs+去重)
- 【HDOJ】1258 Sum It Up
- HDU 1258 Sum It Up(DFS)
- HDU 1258 - Sum It Up
- HDU 1258 Sum It Up (POJ 1564)
- HDU-1258-Sum It Up
- HDU 1258 Sum It Up
- HDU1258 Sum It Up