#include <iostream>
#include <memory.h>
#include <cstdio>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
#define MAX 13
vector<int>stak;
vector<vector<int> >ans;
int t,n,nums[MAX];
void backtraking(int curi,int sum){
if(sum==t){
vector<int>temp=stak;
sort(temp.begin(),temp.end(),greater<int>());
ans.push_back(temp);
return;
}else if(sum>t)return;
else if(curi==n)return;
stak.push_back(nums[curi]);
backtraking(curi+1,sum+nums[curi]);
stak.pop_back();
backtraking(curi+1,sum);
}
int main(){
while (scanf("%d%d",&t,&n)&&n)
{
printf("Sums of %d:\n",t);
ans.clear();
for (int i=n-1;i>=0;--i)scanf("%d",&nums[i]);
backtraking(0,0);
sort(ans.begin(),ans.end(),greater<vector<int> >());
//去重
ans.erase(unique(ans.begin(),ans.end()),ans.end());
if(ans.size()){
for (int i=0;i<ans.size();++i)
{
for (int j=0;j<ans[i].size();++j)
{
if(j>0)printf("+");
printf("%d",ans[i][j]);
}
printf("\n");
}
}else{
printf("NONE\n");
}
}
return 0;
}
UVA 574 - Sum It Up
最新推荐文章于 2018-08-05 14:39:02 发布