0-1背包问题

原创 2017年01月03日 22:08:53

0-1背包问题

   给定n种物品和一个背包。物品i的重量是wi,价值是vi,背包的容量为c。问应如何选择装入背包的物品,使装入背包中物品的总价值最大?

解:

01背包:
使用dp[j]数组存放在只有j空间的包的价值。
从第一个物品开始遍历,空间从允许最大值c开始到w[i]截止
保证包中空间能够放置第i个物品

此时包中空间足够放置物品i,但是物品i可以放也可以不放

当放进包中时:dp[j]=dp[j-w[i]]+v[i];当前空间减去物品i占用空间之后空间所能放置物品的最大价值加物品i价值
当不放进包中:dp[j]=dp[j]; 

#include <stdio.h>
#include <string.h>
#define N 1000 
int dp[N];
int main()
{
	int n,c;
	int w[N],v[N]; 
	while(~scanf("%d%d",&n,&c)){
		memset(dp,0,sizeof(dp));
		for(int i=0;i<n;i++)
		{
			scanf("%d",&w[i]);
		}
		for(int i=0;i<n;i++)
		{
			scanf("%d",&v[i]);
		}
		for(int i=0;i<n;i++)
		{
			for(int j=c;j>=w[i];j--)
			{
				if(dp[j]<dp[j-w[i]]+v[i])
					dp[j]=dp[j-w[i]]+v[i];
			}
		}
		printf("%d\n",dp[c]);
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

0-1背包问题 全

  • 2015年05月23日 17:00
  • 618KB
  • 下载

0/1背包问题

  • 2015年04月27日 10:06
  • 51KB
  • 下载

0-1背包问题的两种动态规划算法思想

动态规划有两种基本思路,一种是自顶而下的备忘录算法,一种思路是自底向上的动态规划算法。...

0—1背包问题

  • 2014年11月27日 09:07
  • 3KB
  • 下载

0-1背包问题

  • 2015年10月17日 22:08
  • 1KB
  • 下载

经典算法之0-1背包问题

0-1背包算法是非常经典的一个算法问题,可惜我一直都只会它的递归算法,而非递归算法是今天刚刚学会的,在此记录一下。 定义一个二维数组 maxValues[ ][ ] 用来记录最大价值,maxValue...

0-1背包问题

  • 2014年11月28日 11:17
  • 576KB
  • 下载

0 -1背包问题c++实现

  • 2013年05月05日 15:58
  • 28KB
  • 下载

0/1背包问题动态规划 空间复杂度是o(C)

有num个物品,总背包容量为Capacity, 求不超过背包总容量的前提下使得背包里的物品的价值达到最大的物品是哪些物品。 对于每个物品,只有两种选择,要么装要么不装进背包。 那么在考虑前 i 个...

0-1背包问题

  • 2013年06月23日 17:04
  • 608KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:0-1背包问题
举报原因:
原因补充:

(最多只允许输入30个字)