天生我材必有难,千金散尽还债来 • 4个月前
#include<iostream>
#include<bitset>
#include<vector>
using namespace std;
bitset<1000001> dp[1001];//前[i][j]前i个,是否重量j
int we[100001];
vector<int> lost;
int main(){
int w,n;
cin>>w>>n;
dp[0][0]=true;
for(int i=1;i<=n;i++){
cin>>we[i];
dp[i]=dp[i-1]|(dp[i-1]<<we[i]);
}
if(dp[n][w]==false) {
cout<<0;
return 0;
}
for(int i=n;i>0;i--){
if(dp[i-1][w]&&w>=we[i]&&dp[i-1][w-we[i]]){
cout<<-1;
return 0;
}
else if(dp[i-1][w]){
lost.push_back(i);
}
else{
w-=we[i];
}
}
for(int i=lost.size()-1;i>=0;i--){
cout<<lost[i]<<" ";
}
return 0;
}
评论:
请先登录,才能进行评论