本题要注意贪心的标准比较,要将除法改成乘法,注意细节,妙啊
#include <stdio.h> #include <iostream> using namespace std; int main() { int m,n,i,j,a[1000][2]; while(scanf("%d%d",&m,&n),m!=-1&&n!=-1) { for(i=0;i<n;i++) scanf("%d%d",&a[i][0],&a[i][1]); for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if((a[i][0]*a[j][1])<(a[j][0]*a[i][1])) { swap(a[i][0],a[j][0]); swap(a[i][1],a[j][1]); } } } double sum=0; for(i=0;i<n;i++) { if(m>a[i][1]) { m-=a[i][1]; sum+=a[i][0]; }else { sum+=(1.0*m/a[i][1])*a[i][0]; break; } } printf("%.3lf\n",sum); } return 0; }