题解
金银岛
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; struct jyd{ double zl,jz,v;//zl为金属重量,jz为金属价值,v为金属的单位价值 }m[105]; bool cmp(jyd a,jyd b){ //按单位价值升序 if(a.v>b.v){ return true; }else{ return false; } } int main(){ int k; cin>>k; //k组数据 for(int i=1;i<=k;i++){ int w,s; //w为口袋承重上限,s为金属种类个数 cin>>w>>s; for(int j=1;j<=s;j++){ cin>>m[j].zl>>m[j].jz; m[j].v=m[j].jz*1.0/m[j].zl; //计算单位价值 } sort(m+1,m+s+1,cmp); double t=0; //总价值 for(int l=1;l<=s;l++){ if(m[l].zl<=w){ //如果金属重量小于口袋上限 t+=m[l].jz; w-=m[l].zl;//容量减少 } else{ t+=m[l].v*w;//乘剩余容量 break; } } cout<<fixed<<setprecision(2)<<t<<endl; } return 0; }
- 1