洛谷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;
}
posted @ 2025-07-29 21:55  2789617221guo  阅读(9)  评论(0)    收藏  举报