刚开始以为是每种食物只能吃一个,发现第二个例子怎么也凑不起来,后来才发现是完全背包.
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
const int maxn = 100001;
int dp[maxn], v[101], w[101], n, m;
int main(){
while (~scanf("%d", &n)){
for (int i = 0; i < n; ++i){
scanf("%d %d", &v[i], &w[i]);
}
scanf("%d", &m);
memset(dp,0,sizeof(dp));
for (int i = 0; i < n; ++i){
for (int j = w[i]; j <= m; ++j){
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
printf("%d\n", dp[m]);
}
return 0;
}