#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int m,n;
int w[31];
int c[31];
int f[31][201];
int main()
{
int i,v;
cin>>m>>n;
for(i=1;i<=n;i++)
cin>>w[i]>>c[i];
for(i=1;i<=n;i++)
for(v=m;v>=1;v--)
if(w[i]<=v) f[i][v]=max(f[i-1][v-w[i]]+c[i],f[i-1][v]);//在里面和不在里面两种情况的比较,取其中较大的一个,
//逆序的原因是为了保证第i件物品决无可能已经放入到容量为v-w[i]的背包中
else f[i][v]=f[i-1][v];
cout<<f[n][m];
return 0;
}
01背包
最新推荐文章于 2025-01-06 05:41:12 发布