您的位置:首页 > 其它

01背包问题

2014-08-08 11:36 218 查看

Problem Description

一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...Cn,求旅行者能获得最大总价值。

Input

输入有多组数据,对于每组输入数据第1行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);

第2行至N+1行:每行两个整数Wi,Ci,表示每个物品的重量和价值。

Output

对于每组输入输出一个数,表示最大总价值。

Sample Input

10 4
2 1
3 3
4 5
7 9


Sample Output

12

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	//freopen("a.txt","r",stdin);
	int m,n,f[210],w[32],c[32];
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		int i,v;
		memset(f,0,sizeof(f));
		for(i=1;i<=n;i++)
		 scanf("%d%d",&w[i],&c[i]);
		for(i=1;i<=n;i++)           //逐渐增加放物品的数量 
		 for(v=m;v>=w[i];v--)       //为后面的计算作铺垫 
		  if(f[v-w[i]]+c[i]>f[v])   //判断是否放第i个物品 
		   f[v]=f[v-w[i]]+c[i];
		printf("%d\n",f[m]);
	}
	return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: