例题:
一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的中量分别是W1,W2...Wn,它们的价值分别为C1,C2...Cn,求旅行者能获得最大价值。
输入:
第一行:两个正整数M(背包容量)和N;
第二行至N+1行:Wi和Ci;
输出:
最大价值
#include<bits/stdc++.h>
using namespace std;
counst int maxm=201,maxn=31;//这里为什么要设数?
int m,n;
int w[maxn],c[maxn];
int f[maxn][maxm];
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&w[i],&c[i]);
for(int i=1;i<=n;i++)
for(int v=m;v>0;v--)//从这里开始的选取最大值我看不懂
if(w[i]<=v)
f[i][v]=max(f[i-1][v],f[i-1][v-w[i]]+c[i]);
else
f[i][v]=f[i-1][v];
printf("%d",f[n][m]);
return 0;
希望能很快得到回复