1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<iostream>
using namespace std;
const int N = 1010; int dp[N][N]; int w[N]; int v[N];
int main() { int n, weight; scanf("%d%d", &n, &weight);
for (int i = 1; i <= n; i++) scanf("%d%d", &w[i], &v[i]);
for (int i = 1; i <= n; i++) for (int j = weight; j >= 1; j--) if (j < w[i]) dp[i][j] = dp[i - 1][j]; else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
cout << dp[n][weight] << endl; }
|