#include<bits/stdc++.h>
using namespace std;
int a[10005]; // 存放集合s的数据
int n, c, sum;
int flag = 0; // 有解时flag=1
int ans[10005] = {0};
// 递归求解
// 从pos处向后查找,sum记录此时的加和,top作为ans数组的游标
void getRes(int pos, int sum, int top)
{
// 相加和大于c时,无解
// flag=1时,有解
if (sum > c || flag){
return ;
}
// 找到相加和等于c的,即有解时,打印结果
if(sum == c){
for (int i = 0; i < top; i++){
if (i == top-1){
cout<<ans[i]<<endl;
}
else{
cout<<ans[i]<<" ";
}
}
// 标记有解
flag = 1;
return ;
}
// 主体程序
for (int i = pos; i < n; i++){
if (a[i] + sum <= c){
// 将此时可能符合条件的元素暂存入ans数组
ans[top] = a[i];
getRes(i+1, sum+a[i], top+1);
}
}
}
int main()
{
cin>>n>>c;
sum = 0;
for (int i = 0; i < n; i++){
cin>>a[i];
sum += a[i];
}
if (sum < c){ // 此时必然无解
cout<<"No Solution!"<<endl;
}
else{
// 从
getRes(0, 0, 0);
if (!flag){
cout<<"No Solution!"<<endl;
}
}
return 0;
}
06-01