很简单的一道贪心题,但是做的却很杯具。。 #include<stdio.h> #include<string.h> int m,n; int jf[1005][2]; double f[1005],ans; int main() { while(scanf("%d%d",&m,&n)==2) { if(m==-1&&n==-1) break; int i,j; for(i=1;i<=n;i++) { scanf("%d%d",&jf[i][0],&jf[i][1]); if(jf[i][1]==0) f[i]=1005.0; else f[i]=(double)jf[i][0]/jf[i][1]; } for(i=1;i<n;i++) { for(j=n;j>=i+1;j--) { if(f[j]>f[j-1]) { double s; s=f[j]; f[j]=f[j-1]; f[j-1]=s; int t; t=jf[j][0];jf[j][0]=jf[j-1][0];jf[j-1][0]=t; t=jf[j][1];jf[j][1]=jf[j-1][1];jf[j-1][1]=t; } } } ans=0;i=1; for(i=1;i<=n;i++) { if(m>=jf[i][1]) { ans+=(double)jf[i][0]; m-=jf[i][1]; } else { ans+=(double)m/jf[i][1]*jf[i][0]; break; } } printf("%.3lf/n",ans); } return 0; }