其他分享
首页 > 其他分享> > 洛谷P1510 精卫填海(01背包)

洛谷P1510 精卫填海(01背包)

作者:互联网

#include<bits/stdc++.h>

using namespace std;
int v,n,c;
int dp[10001]; // 当体力为i时,所搬运的石头的最大体积 
int w[10001],h[10001];
int main(){
	int res = 0; 
	cin >> v >> n >> c;
	for(int i = 1;i<=n;i++){
		cin >> w[i] >> h[i];
		res += w[i];
	}
	
	if(res < v){
		cout <<"Impossible";
		return 0;
	}
	
	for(int i = 1;i<=n;i++){
		for(int j =c;j>=h[i];j--){
			dp[j] = max(dp[j],dp[j-h[i]]+w[i]);
		}
	}
	
	// 枚举体力为i时的最大体积,如果有比v大的,直接输出c-i就是最小体力
	//如果没有则输出impossible 
	for(int i = 1;i<=c;i++){
		if(dp[i] >= v){
			cout << c-i;
			return 0;
		}
	}
	
	cout << "Impossible";
	return 0;
}

标签:体力,洛谷,10001,int,res,P1510,精卫填海,dp,cout
来源: https://blog.csdn.net/m0_53024800/article/details/121168790