模板题解
最基本的三层循环,二维dp数组的做法
#include <iostream>
#include <algorithm>
#include <cstring>
#include <math.h>
using namespace std;
int main(){
int N=0, V=0, v[1005], w[1005];
int dp[1005][1005];
while(cin >> N >> V){
memset(dp, 0, sizeof(dp));
memset(v, 0, sizeof(v));
memset(w, 0, sizeof(w));
for(int i=1; i<=N; ++i){
cin >> v[i] >> w[i];
}
for(int i=1; i<=N; ++i){
for(int j=0; j<=V; ++j){
for(int k=0; k*v[i]<=j; ++k){
dp[i][j]=max(dp[i][j], dp[i-1][j-k*v[i]]+k*w[i]);
}
}
}
cout << dp[N][V] << endl;
}
return 0;
}