1291 快斗的烦恼

描述

话说黑羽快斗(大家都知道吧)又一次成功潜入了某个博物馆,而眼前宝石的数量之多也是他事先未料到的。面对着数量如此多的珠宝,快斗在叹息自己带的背包太小之余,也在烦恼着该如何带走最大价值的宝石。

快斗很快就把宝石收集到了一起,对于每一枚宝石,快斗给出了它的价值。然而,并不是价值高的宝石就应该带走。由于有的宝石虽然价值很高,但是因为体积太大而占用了太多背包的位置。 而快斗希望他带走的宝石的总价值最大。这就要对宝石进行一些取舍。
由于宝石的数量过于巨大,即使以快斗的高智商也不能在很短的时间解决。好在快斗本身也是一个程序员,他决定用计算机帮助他计算他能带走的宝石的最大价值。

输入

多组测试数据。

每组数据3行:

第一行2个整数 n (0 <= n <=1000 ), w (0 <= w <=5000 )。表示宝石个数和背包空间。
第二行n个整数vi (i=1,2,……n),表示第i个宝石的价值。(0<= vi <=10000)
第三行n个整数ti (i=1,2,……n),表示第i个宝石的体积。(1<= ti <= w)

数据以-1 -1结束,不必输出结果。
输出

对每一组数据输出一个整数,即能够带走的最大价值。

样例输入

4 8

2 3 4 5

2 3 4 5

-1 -1

样例输出

8

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
int main()
{
	int value[1001],volumn[1001];//value、volumn分别保存珠宝的价值和体积
	long f[5001];//由于背包空间最大值为5000
	int n,m;//n代表珠宝数目,m代表背包体积
	ifstream cin("aaa.txt");
	while(cin>>n>>m&&n!=-1&&m!=-1)
	{
		memset(value,0,sizeof(value));
		memset(volumn,0,sizeof(volumn));
		memset(f,0,sizeof(f));
		for(int i=1;i<=n;i++)
		{
			cin>>value[i];
		}
		for(int i=1;i<=n;i++)
		{
			cin>>volumn[i];
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=m;j>=0;j--)
			{
				if(j>=volumn[i]&&f[j]<f[j-volumn[i]]+value[i])
					f[j]=f[j-volumn[i]]+value[i];
			}
		}
		cout<<f[m]<<endl;
	}
	system("pause");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值