1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
   | #include <bits/stdc++.h> using namespace std; const int N = 12010, M = 2010; int n, m; int v[N], w[N]; int f[M];
  int main() {     cin >> n >> m;     int cnt = 0;     for (int i = 1; i <= n; i++) {         int a, b, s;         cin >> a >> b >> s;         int k = 1;         while (k <= s) {             cnt++;             v[cnt] = a * k;             w[cnt] = b * k;             s -= k;             k *= 2;         }         if (s > 0) {             cnt++;             v[cnt] = a * s;             w[cnt] = b * s;         }     }     n = cnt;     for (int i = 1; i <= n; i++)         for (int j = m; j >= v[i]; j--)              f[j] = max(f[j], f[j - v[i]] + w[i]);     cout << f[m] << endl;     return 0; } 
   |