POJ 2392 Space Elevator / 體積不定的多重揹包
阿新 • • 發佈:2019-01-27
對於體積不變 可以先排個序 這樣對於體積大的物品 轉移時比他小的狀態都算出來了
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 444; struct block { int a, b, c; }a[maxn]; int dp[maxn*100]; bool cmp(block a, block b) { return a.b < b.b; } int main() { int n; scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d %d %d", &a[i].a, &a[i].b, &a[i].c); sort(a+1, a+n+1, cmp); dp[0] = 1; for(int i = 1; i <= n; i++) { for(int k = 1; k <= a[i].c; k++) { for(int j = a[i].b; j >= a[i].a; j--) { dp[j] |= dp[j-a[i].a]; } } } int i, ans = 0; for(i = 40000; i >= 0; i--) if(dp[i]) break; printf("%d\n", i); return 0; }