JZOJ T3 小明逛超市

题意

有n元,有m种物品,然后有m组数据
读入 x , y , z x,y,z 三个数:
x x 表示这个物品的单价
y y 表示这个物品的价值
z z 若为0,则表示这个物品可以买多个
z z 若为1,则表示这个物品只能买一个
要求在n元内买到价值最高的买法

样例

输入
5 2
2 3 1
3 3 0	
输出
6 

思路

这题是一道混合背包的题目,若 z z 为0,则是完全背包,否则则是01背包

代码

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,x,y,z,ans[10001];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		if(z==1)
		for(int j=n;j>=x;j--)
		ans[j]=max(ans[j],ans[j-x]+y);//01背包
		else
		for(int j=x;j<=n;j++)
		ans[j]=max(ans[j],ans[j-x]+y);//完全背包
		
	}
	printf("%d",ans[n]);
    return 0;
 } 

猜你喜欢

转载自blog.csdn.net/LTH060226/article/details/86609805
T3