HDU_1009_FatMouse' Trade

思路:最开始想的是求出每组 J[i] / F[i]记做R[i],然后从大到小排序,然后就判断M是否大于R[i]最大的那一组的J[i],如果大于则M-=J[i],否则就是M*R[i]。但是写了一会儿后发现代码能力实在太弱写不粗来了。。。于是就盗了一份别人的代码。
#include<bits/stdc++.h> using namespace std; struct node { int j; int f; double r; }s[1005]; bool cmp(node a,node b) { return a.r>b.r; } int main() { int m,n; int i; while(cin>>m>>n&&(n!=-1||m!=-1)) { for(i = 0;i < n;i++) { cin>>s[i].j>>s[i].f; s[i].r = (double )s[i].j/s[i].f; } sort(s,s+n,cmp); double sum = 0; i = 0; while(m&&i < n) { if(m > s[i].f) { sum += s[i].j; m-=s[i].f; } else { sum += (double)m/s[i].f*s[i].j; m = 0; } i++; } printf("%.3f\n",sum); } return 0; }
浙公网安备 33010602011771号