跟0-1背包类似
我们只需要判断这个硬币选还是不选
由于他要的是最小序列 所以刚开始的时候sort一下既可以
有一种情况 全部加起来都没m大的需要特判 pta就喜欢特判好像
可能是由于m特别小 所以回溯没有t 这个地方不太清楚复杂度
有大佬清楚的可不可以留言一下
#include<bits/stdc++.h>
using namespace std;
map<int,int>mp;
const int maxn=305;
//bool number[maxn + 5];
int n,m,sum,cnt;
#define PI 3.141592653
typedef long long ll;
ll dp[100000];
int v[100000];
int flag=0,ans;
void dfs(int k){
if(ans>m) return ;
if(k>n) return ;
if(flag) return ;
ans+=v[k];
dp[++cnt]=v[k];
if(ans==m){
if(flag) return ;
flag=1;
cout<<dp[1];
for(int i=2;i<=cnt;i++){
cout<<" "<<dp[i];
}
return ;
}else dfs(k+1);
ans-=v[k];
dp[cnt--]=0;
dfs(k+1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) {
cin>>v[i]; sum+=v[i];
}
sort(v+1,v+1+n);
if(sum<m) {
cout<<"No Solution";return 0;
}
dfs(1);
if(!flag){
cout<<"No Solution";
}
return 0;
}