POJ 1011 重组木棒

来源:互联网 发布:掌淘科技 游族网络 编辑:程序博客网 时间:2024/05/01 23:54
#include<iostream>#include<algorithm>#include<fstream>#include<ctime>using namespace std;#define DEBUG#define MAX 64static int len[MAX];static int used[MAX];static int length;static int sum;static int n;int cmp(int a, int b){return a > b;}int search_dfs2(int s, int cur, int total){if (total == length){return 1;}else if (total < length)return 0;   //第一次编写时忘记该项int i;for (i = s; i < n; i++){if (!used[i] && len[i] <= cur){used[i] = 1;if (len[i] = cur){if (search_dfs2(0, length, total - cur))return 1;}else{if (search_dfs2(i + 1, cur - len[i], total - len[i]))return 1;}used[i] = 0;}}return 0; //第一次编写时忘记该项}int solve(){#ifdef DEBUGfstream cin("G:\\book\\algorithms\\acm\\Debug\\dat.txt");#endifwhile (cin >> n && 0 != n){int i;sum = 0;for (i = 0; i < n; i++){cin >> len[i];sum += len[i];}sort(len,len + n, cmp);for (i = len[0]; i <= sum; i++){if (sum % i == 0){length =  i;if (search_dfs2(0, i, sum)){cout << i << "\n";break;}}}}return 0;}int main(){#ifdef DEBUGclock_t start, end;start = clock();#endif    solve();  #ifdef DEBUGend = clock();cout << "Time:" << (double)(end - start) / CLOCKS_PER_SEC << "S\n";#endifreturn 0;}
运行超时,待优化。
原创粉丝点击