代码如下
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int> coins,result;
int used[10000+10];
int sum=0;
void dfs(int k)//当前凑了k块钱
{
if(k==m)//符合凑的钱时 输出答案
{
for(int i=0;i<result.size();i++)
{
if(i!=0) cout<<" ";//小心题目要求输出的格式
printf("%d",result[i]);
}
exit(0);//void必备神器
}
for(int i=0;i<n&&k<=m;i++)
{
if(!used[i])//没有被遍历过时
{
used[i]=1;
result.push_back(coins[i]);
dfs(k+coins[i]);
used[i]=0;
result.pop_back();
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
int t;
cin>>t;
coins.push_back(t);
sum+=t;
}
sort(coins.begin(),coins.end());//不排序的话就是从大到小输出的 注意vector中对排序得到用法
if(sum>=m)
{
dfs(0);//从0块钱开始搜
}
cout<<"No Solution"<<endl;
return 0;
}