寒假作业第二组E题题解
注意看题,注意看题,注意看题。重要的事情三遍感觉都不够。不怕大家笑话,这道题RuntimeError 9次,我一直以为是哪里越界了,结果最后发现的时候,真是无语了,题目里说了,所有的integer都不大于1000,也就是包括m,n.所以,我就错在了开了个二维数组,所以一直越界。改成两个1维立马AC。
题意简单,简单的贪心,按rate排下大小,然后挨个减就行了。
#include <iostream> #include <algorithm> #include <cstdio> #include <map> #include <string> #include <vector> #include <string.h> int main() { int m,n; while(scanf("%d%d",&m,&n)!=EOF&&(m!=-1||n!=-1)) { double a[1010]={0}; double b[1010]={0}; int t; double sum=0; int i; for(i=0;i<n;i++) { scanf("%lf%lf",&a[i],&b[i]); } for(i=0;i<n;i++) { for(int j=0;j<n-i-1;j++) { if((a[j]/b[j])>(a[j+1]/b[j+1])) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; t=b[j]; b[j]=b[j+1]; b[j+1]=t; } } } i=n-1; for(;i>=0&&m;i--) { if(m>=b[i]) {sum+=a[i]; m-=b[i]; } else { sum+=(m/b[i])*a[i]; m=0; } } printf("%.3f\n",sum); } return 0; }