题目描述:
给定一个能装最大重量为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;
}
如有疑问,可以在下方评论中提出哦~
小编会尽量解决你的问题。