传统的背包问题~3479:【例86.4】 混合背包
2024-01-09 22:09:07
【题目描述】
一个旅行者有一个最多能装V�公斤的背包,现在有n�件物品,它们的重量分别是W1�1,W2�2,...,Wn��,它们的价值分别为C1�1,C2�2...Cn��。有的物品只可以取一次(0101背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
【输入】
第一行:二个整数,M�(背包容量,M≤200�≤200),N�(物品数量,N≤30�≤30);
第22..N+1�+1行:每行三个整数Wi��,Ci��,Pi��,前两个整数分别表示每个物品的重量,价值,第三个整数若为00,则说明此物品可以购买无数件,若为其他数字,则为此物品可购买的最多件数(P�)。
【输出】
仅一行,一个数,表示最大总价值。
【输入样例】
10 3
2 1 0
3 3 1
4 5 4
【输出样例】
11
#include<bits/stdc++.h>//gezhengxu2024
using namespace std;
int W,n;
int w[35],v[35],c[35];
int dp[205];
int main()
{
cin>>W>>n;
int i,j,k;
for(i=1;i<=n;i++)
{
cin>>w[i]>>v[i]>>c[i];
if(c[i]==0)
{
c[i]=99999;
}
}
for(i=1;i<=n;i++)
{
for(j=W;j>=w[i];j--)
{
for(k=1;k<=min(j/w[i],c[i]);k++)
{
dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);//gezhengxu2024
}
}
}
cout<<dp[W];
return 0;
}
文章来源:https://blog.csdn.net/m0_74811974/article/details/135489015
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!