本文主要是介绍2240部分背包问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*
"%.2f"表示小数点后面保留两位小数
当一个物品有多个属性而且要根据属性去排序是用结构体储存
然后为sort建一个比较函数如果比较函数是大于号就是从大到小排序
*/
#include<bits/stdc++.h>
using namespace std;
struct coin{
int m,v;
double avg;
}cs[105];
bool cmp(coin c1,coin c2){
return c1.avg>c2.avg;//这是从大到小进行排序
}
int main(){
int n,t,mark=0;//这里mark一定要赋初始值不然会数字越界发生段错误
double ans=0;
cin>>n>>t;
for(int i=0;i<n;i++){
cin>>cs[i].m>>cs[i].v;
cs[i].avg=(1.0*cs[i].v)/cs[i].m;
}
sort(cs,cs+n,cmp);//cmp是自己构造的比较函数
while(t>=cs[mark].m&&mark<n){
t-=cs[mark].m;
ans+=cs[mark].v;
mark++;
}
ans+=t*cs[mark].avg;
printf("%.2f",ans);
return 0;
}
这篇关于2240部分背包问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!