这一题和曾经做过的老人真是饿了很像…… http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1001&cid=2783&hide=0 #include<iostream> using namespace std; int main(){ int m, n, i, j; double t1, t2, sum; while(cin>>m>>n && m!=-1 && n!=-1){ float a[1001][2]; for(i=0; i<n; i++){ for(j=0; j<2; j++){ cin>>a[i][j]; } } for(j=0; j<n-1; j++){ for(i=0; i<n-1-j; i++) if(a[i][0]/a[i][1] < a[i+1][0]/a[i+1][1]){ t1 = a[i][0]; a[i][0] = a[i+1][0]; a[i+1][0] = t1; t2 = a[i][1]; a[i][1] = a[i+1][1]; a[i+1][1] = t2; } } //到此a[i][0]/a[i][1]从大到小排序完毕。 sum=0.0; for(i=0; i<n; i++){ if(m<=a[i][1]){ sum+=a[i][0]*(m/a[i][1]); m=0; break; } else{ sum+=a[i][0]; m=m-a[i][1]; } } cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(3); cout<<sum<<endl; } return 0; }