HDU 1258 Sum it up 回溯法 暴力

来源:互联网 发布:c语言流程图符号含义 编辑:程序博客网 时间:2024/04/29 06:30
#include <iostream>#include <algorithm>using namespace std;int t, n;int a[20];int save[20];int index;int sign;int cmp(const int &a, const int & b){return a > b;}void dfs(int k , int sum){if(sum > t)return ;if(sum ==  t){sign = 1;for(int i = 0; i < index - 1; i++)cout << save[i] << "+";cout << save[index-1] << endl;return;}int last = -1;for(int i = k + 1; i <= n; i++){if(a[i] != last){save[index++] = a[i];last = a[i];dfs(i, sum + a[i]);index--;}}}int main(){while(cin >> t >> n, t || n){index = 0;sign = 0;for(int i= 1; i <= n; i++)cin >> a[i];sort(a+1, a+n+1, cmp);printf("Sums of %d:\n", t);dfs(0, 0);if(!sign)cout << "NONE" << endl;}return 0;}