#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;
}
HDU 1258 Sum it up 回溯法 暴力
最新推荐文章于 2016-07-18 08:59:37 发布