题目描述:
给定一个能装最大重量为m的背包和n种食品,这n种食品如食盐,白糖,大米等可以部分取过来想取多少就取多少。
已知第i种食品的最多拥有wi公斤,其商品价值为vi元/公斤,编程确定一个装货方案,使得装入背包中的所有物品总价值最大。
输入:
第一行两数n和m,分别表示食品种类和背包容量。
接下来n行,每行两个数wi和vi,分别表示第i种食品的最多拥有重量和价值。
输出:
一行一个数表示最大价值。
样例输入:
3 5 4 2 3 6 5 3
样例输出:
24
数据范围:
1<=n,m,wi,vi<=10000
以下是代码:
#include<bits/stdc++.h>
using namespace std;
struct data{
int w,v;
}a[100010];
int n,m,ans;
bool cmp(data x,data y){
return x.v>y.v;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i].w>>a[i].v;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
if(m>=a[i].w){
m-=a[i].w;
ans+=a[i].w*a[i].v;
}
else{
ans+=m*a[i].v;
m=0;
break;
}
}
cout<<ans;
return 0;
}
如有疑问,可以在下方评论中提出哦~
小编会尽量解决你的问题。
这是一个关于背包问题的动态规划求解实例。给定一个最大容量的背包和多种食品,每种食品有无限数量且价值与重量成比例,目标是找到装入背包中的食品组合,使得总价值最大。代码通过排序食品价值密度并逐一添加到背包中实现这一目标。
2457

被折叠的 条评论
为什么被折叠?



