【水】背包问题的POJ例题

1 0-1背包问题

本来想做成一个七八个题的进阶集合,结果后面随着难度进阶个人认为不能单独归类为背包问题了,故此此篇比较水,就是在单纯介绍0-1背包问题

POJ 3624

题解:非常基础的模板题,套用0-1背包公式即可。

还是放上代码:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		int value[n+2],weight[n+2];
	for(int i=0;i<n;i++)
	{
		cin>>weight[i]>>value[i];
	}
	int f[m+2];
	memset(f,0,sizeof(f));
	for(int i=0;i<n;i++)
	{
		for(int j=m;j>=weight[i];j--)
		{
			f[j]=max(f[j-weight[i]]+value[i],f[j]);
		}
	}
	cout<<f[m]<<endl;
	}
	
}


POJ 3628

题意:给n个数,和一个数m,求n个数中的部分组成的和,与m的最小差(和必须大于等于m)

题解:没有给总容量需要输入过程中自己计算。其余还是常规0-1背包问题。物品的价值和重量此时可看做一个。

代码:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
	int n,b;
	while(cin>>n>>b)
	{
		int weight[n+2];
		mem
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值