金銀島 OpenJ_Bailian - 2795 (貪心)
阿新 • • 發佈:2018-11-09
https://vjudge.net/problem/OpenJ_Bailian-2795
貪心水題. 不解釋
//金銀島 貪心 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 10010; int w, s, k; struct Metal{ double nw; //價效比 int v, n; //總重量和價值 }metal[maxn]; bool operator < (const Metal &a, const Metal &b) { return a.nw<b.nw; } int main() { scanf("%d",&k); while(k--){ scanf("%d%d",&w,&s); memset(metal, 0, sizeof(metal)); for(int i = 1; i <= s; i++){ scanf("%d%d",&metal[i].n,&metal[i].v); metal[i].nw = (double)metal[i].v/metal[i].n; //分割 } sort(metal+1, metal+s+1); double sum = 0; for(int i = s; i > 0; i--){ if(w > metal[i].n) w-=metal[i].n, sum+=metal[i].v; //不拆分直接放完 else{ //拆分 sum += w*metal[i].nw; break; } } printf("%.2f\n",sum); } return 0; }