码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3624 Charm Bracelet【01背包】

时间:2014-12-01 14:06:43      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   sp   for   div   log   bs   amp   

解题思路:直接套公式就能做的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背包】

标签:blog   io   ar   sp   for   div   log   bs   amp   

原文地址:http://www.cnblogs.com/wuyuewoniu/p/4134830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!