Space Elevator POJ 2392 01背包/多重背包+二进制
2017-05-11 20:40
288 查看
题意:n种瓷砖,每种有对应的高度和数量,以及不能超过的高度,问最高堆多高(感觉自己的总结能力真的是有点差
多重背包
算了一下,用01背包来做不会超时,但是在中间真的是wa的想哭
1.手误把排序的东西写错了,,if(),后面的是对的
2.最后要扫一遍,不一定最大的是最后一个
多重 背包+二进制
多重背包
算了一下,用01背包来做不会超时,但是在中间真的是wa的想哭
1.手误把排序的东西写错了,,if(),后面的是对的
2.最后要扫一遍,不一定最大的是最后一个
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int maxn = 40005; int dp[maxn]; struct node { int h,c,a; }; node b[405]; bool cmp(node a1,node a2) { if(a1.a!=a2.a) return a1.a<a2.a; } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d %d %d",&b[i].h,&b[i].a,&b[i].c); } sort(b+1,b+n+1,cmp); for(int i=1;i<=n;i++) { for(int j=b[i].a;j>=0;j--) { for(int g=0;g*b[i].h<=j&&g<=b[i].c;g++) { dp[j]=max(dp[j],dp[j-g*b[i].h]+g*b[i].h); } } } int ans=0; for(int i=0;i<=b .a;i++) ans=max(ans,dp[i]); printf("%d\n",ans); return 0; }
多重 背包+二进制
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; struct node { int h,a,c; bool operator < (const node &t) { return a<t.a; } }; const int maxn = 40005; node g[405]; int dp[maxn]; void allPack1(int c,int p,int v) { for(int i=c;i<=v;i++) dp[i]=max(dp[i],dp[i-c]+p); } void OnePack1(int c,int p,int v) { for(int i=v;i>=c;i--) dp[i]=max(dp[i],dp[i-c]+p); } void MultiPliePack1(int c,int p,int n,int v) { if(n*p>=v) { allPack1(c,p,v); return ; } int k=1; while(k<=n) { OnePack1(k*c,k*p,v); n-=k; k=k*2; } OnePack1(n*c,n*p,v); } int main() { int k; scanf("%d",&k); for(int i=0;i<k;i++) scanf("%d %d %d",&g[i].h,&g[i].a,&g[i].c); sort(g,g+k); for(int i=0;i<k;i++) MultiPliePack1(g[i].h,g[i].h,g[i].c,g[i].a); int ans=0; for(int i=0;i<=g[k-1].a;i++) ans=max(ans,dp[i]); printf("%d\n",ans); return 0; }
相关文章推荐
- Space Elevator POJ 2392 01背包/多重背包+二进制
- Space Elevator POJ 2392 01背包/多重背包+二进制
- Space Elevator POJ 2392 01背包/多重背包+二进制
- Space Elevator POJ 2392 01背包/多重背包+二进制
- Space Elevator POJ 2392 01背包/多重背包+二进制
- Space Elevator POJ 2392 01背包/多重背包+二进制
- Space Elevator POJ 2392 01背包/多重背包+二进制
- poj 2392 Space Elevator 二进制拆包多重背包
- poj 2392 Space Elevator dp 多重背包
- poj_2392_Space Elevator & poj_1742_Coins 一种多重背包
- POJ 2392 Space Elevator 多重背包
- POJ2392-Space Elevator-多重背包
- poj 2392 Space Elevator 多重背包
- POJ_2392_Space_Elevator_(动态规划,背包)
- poj Space Elevator 2392 (多重背包)
- poj2392(Space Elevator + 多重背包)
- POJ 2392 Space Elevator 背包题解
- POJ 2392 Space Elevator 多重背包
- POJ 2392 Space Elevator 排序+多重背包
- POJ 2392 Space Elevator [DP 多重背包]