题意
有n元,有m种物品,然后有m组数据
读入
三个数:
表示这个物品的单价
表示这个物品的价值
若为0,则表示这个物品可以买多个
若为1,则表示这个物品只能买一个
要求在n元内买到价值最高的买法
样例
输入
5 2
2 3 1
3 3 0
输出
6
思路
这题是一道混合背包的题目,若 为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;
}