@zhang

天生我材必有难,千金散尽还债来  •  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;
}

评论:

请先登录,才能进行评论