洛谷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