intmain(){ int M, T, time, value; cin >> T >> M; int f[10000] = {0}; for (int i = 0; i < M; i++) { cin >> time >> value; for (int j = T; j >= time; j--) { f[j] = max(f[j], f[j - time] + value);//同步规划判断,f[j-time]表示减去此时间之后还剩的时间。 } } cout << f[T]; return0; }
#include<bits/stdc++.h> usingnamespace std; constint maxn = 100000; int f[maxn], V, n, c, w, m;
voidzobag(int x, int y){//0-1背包 for (int i = V; i >= x; i --) f[i] = max(f[i], f[i - x] + y); }
voidcompletebag(){//完全背包 for (int i = c; i <= V; i ++) f[i] = max(f[i], f[i - c] + w); }
voidmbag(int a, int b, int h){//多重背包 if (h * a >= V) completebag(); else { int k = 1; while (k < h) { zobag(k *a, k *b); h -= k; k <<= 1; } zobag(h *a, h *b); } }
intmain(){ cin >> n >> V; while (n --) { cin >> w >> c >> m; mbag(c, w, m); } cout << f[V] << endl; return0; }