#include <bits/stdc++.h>
using namespace std;
int n,M,a[1001],v[1001],f[1001][1001];
int main(){
cin>>M>>n;
for(int i = 1;i <= n;i++){
cin>>a[i]>>v[i];
}
for(int i = 1;i <= n;i++){
for(int j = M;j >= 1;j--){
if(j >= a[i]){
f[i][j] = max(f[i - 1][j],f[i - 1][j - a[i]] + v[i]);
}else{
f[i][j] = f[i - 1][j];
}
}
}
cout<<f[n][M]<<endl;
return 0;
}
/*
70 3
71 100
69 1
1 2
*/
【采药问题】
最新推荐文章于 2025-12-05 17:02:52 发布
该博客主要介绍了一种使用动态规划解决背包问题的算法。通过输入物品价值和重量,程序计算出在不超过给定背包容量的情况下,能获取的最大价值。算法实现包括两个嵌套循环,逐个处理物品并更新状态转移矩阵。示例输入为70、3,物品分别为(71, 100)、(69, 1)、(1, 2),程序输出了最大价值。
364

被折叠的 条评论
为什么被折叠?



