洛谷P2639 [USACO09OCT] Bessie's Weight Problem G 题解
本题做法
- 0-1 背包 DP。
思路
这道题是 0-1 背包 DP 的变种,与模板的区别就是价值等于代价。
其他的跟 0-1 背包 DP 的模板没什么区别的,直接按照模板打上去就行了。
代码
#include<bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int N=505;
const int H=4.5e4+5;
ll n,h,a[N],dp[N][H];
//dp[i][j]表示前i捆草时剩下j公斤草时的最大食量
int main(){
cin>>h>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=0;j<=h;j++){
if(j>=a[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);
else dp[i][j]=dp[i-1][j];
}
}
cout<<dp[n][h]<<endl;
return 0;
}