POJ 3624 Charm Bracelet【01背包】
2014-12-01 13:18
357 查看
解题思路:直接套公式就能做的01背包,
for(i=1;i<=n;i++) { for(v=w[i];v<=m;v++) f[i,v]=max(f[i,v],f[i-1,v-w[i]]+d[i]);//只想明白了可以用一维数组来存放包的价值,因为我们需要的只是包的最大价值,不用记录是第几个包的时候,有最大价值,然后v从w[i]到包的总容量循环不明白。 } for(i=1;i<=n;i++) { for(v=m;v>=c[i];v--) //即最开始给定包的总容量(此时包是空的),循环跳出条件是预留出现在正在放入的这个包的体积(这样你可以选择放入或者不放入),然后放下一个包的时候,之前包的总价值也被记录下来了。 f[v]=max(f[v],f[v-w[i]]+d[i]); }
#include<stdio.h> #include<string.h> int f[15000],w[3500],d[3500]; int max(int a,int b) { if(a>b) return a; else return b; } int main() { int n,m; int i,v; while(scanf("%d %d",&n,&m)!=EOF) { memset(f,0,sizeof(f)); for(i=1;i<=n;i++) scanf("%d %d",&w[i],&d[i]); for(i=1;i<=n;i++) { for(v=m;v>=w[i];v--) { f[v]=max(f[v],f[v-w[i]]+d[i]); } } printf("%d\n",f[m]); } }
相关文章推荐
- poj 3624 Charm Bracelet 01背包问题
- POJ 3624 Charm Bracelet (01背包)
- POJ 3624 Charm Bracelet(DP 01背包)
- POJ3624 - Charm Bracelet(01背包)
- POJ 3624 Charm Bracelet 01背包
- poj 3624 Charm Bracelet (01背包)
- poj 3624 Charm Bracelet 【01背包】+poj2524【并查集】
- POJ 3624 Charm Bracelet (基础01背包)
- poj 3624 Charm Bracelet (01背包模板)
- POJ 3624 Charm Bracelet(01背包)
- poj3624 Charm Bracelet(DP,01背包)
- POJ 3624 Charm Bracelet 01背包问题
- POJ 3624 Charm Bracelet - 01背包-详解
- POJ 3624 Charm Bracelet (01背包)
- POJ 3624 Charm Bracelet 【DP】【01背包】
- POJ Problem 3624 Charm Bracelet 【01背包】
- POJ 题目3624 Charm Bracelet(动态规划 01背包)
- POJ - 3624 Charm Bracelet (01背包)
- poj 3624 Charm Bracelet(01背包)
- POJ 3624 Charm Bracelet【01背包入门题】