他知道了每样物品的单价,以及他对每样物品的需求度(对于相同的物品,需求度可以累加),他想要花费至多N元钱使得他对所买物品的需求度和最大。
4 5
5 3 0
5 3 1
4 4 0
2 3 0
3 2 1
6
买需求度为3的物品两个,耗费2×2=4元,获得3×2=6的需求度
对于50%的数据,1≤m≤20
对于100%的数据,1≤m≤100,0≤n≤10000,1≤y≤1000
这道题就是一道背包。
分两种,只能买一次那个就用01背包,不然就用完全背包。
然后就可以了。
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,x,y,z,f[10001];
int main()
{//freopen("c.in","r",stdin);//freopen("c.out","w",stdout);scanf("%d%d",&n,&m);//读入for (int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);//读入if (z)//01背包的部分for (int j=n;j>=x;j--)f[j]=max(f[j],f[j-x]+y);else//完全背包的部分for (int j=x;j<=n;j++)f[j]=max(f[j],f[j-x]+y);}printf("%d",f[n]);//输出//fclose(stdin);//fclose(stdout);return 0;
}
本文发布于:2024-02-04 15:43:48,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170710830056796.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |