POJ 2392 Space Elevator
2012-08-18 14:25
295 查看
题目链接
多重背包。先按排a[i]好序,然后倒叙多重背包。
多重背包。先按排a[i]好序,然后倒叙多重背包。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> struct node { int h,c,a; }bag[401]; int cmp(const void *q,const void *b) { return (*(struct node *)q).a > (*(struct node *)b).a ? 1:-1; } int p[401][40001],h[401],c[401],a[401]; int main() { int i,n,j,max,k,mix; scanf("%d",&n); max = 0; for(i = 0;i <= n-1;i ++) { scanf("%d%d%d",&bag[i].h,&bag[i].a,&bag[i].c); if(max < bag[i].a) max = bag[i].a; } qsort(bag,n,sizeof(bag[0]),cmp); for(i = 0;i <= n-1;i ++) p[i][0] = 1; for(i = bag[0].h,j = 1;j <= bag[0].c;i += bag[0].h,j ++) { if(i > bag[0].a) break; p[0][i] = 1; } for(i = 1;i <= n-1;i ++) { for(j = max;j >= 0;j --) { if(p[i-1][j]) { for(k = 1;k <= bag[i].c;k ++) { if(j+k*bag[i].h > bag[i].a) break; p[i][j+k*bag[i].h] = 1; } } } } mix = 0; for(i = 0;i <= n-1;i ++) { for(j = 0;j <= max;j ++) { if(mix < j&&p[i][j]) mix = j; } } printf("%d\n",mix); return 0; }
相关文章推荐
- poj 2392 Space Elevator (多重背包)
- POJ2392-Space Elevator
- POJ 2392 Space Elevator (DP)
- POJ2392——Space Elevator(DP)
- poj2392 Space Elevator(多重背包)
- POJ 2392 Space Elevator 贪心+dp
- POJ 2392 Space Elevator
- poj 2392 Space Elevator
- POJ 2392 Space Elevator
- POJ 2392 Space Elevator(贪心+多重背包)
- POJ 2392 Space Elevator (dp)
- poj 2392 Space Elevator(多重背包变形)
- poj 2392 Space Elevator
- POJ 2392 Space Elevator
- POJ 2392 Space Elevator(贪心+多重背包)
- poj 2392 Space Elevator (多重背包)
- poj 2392 Space Elevator
- poj 2392 space elevator
- POJ 2392 Space Elevator (多重背包问题)
- POJ - 2392 Space Elevator(多重背包)