注意看题,注意看题,注意看题。重要的事情三遍感觉都不够。不怕大家笑话,这道题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!=-||n!=-))
{
double a[]={};
double b[]={};
int t;
double sum=;
int i;
for(i=;i<n;i++)
{
scanf("%lf%lf",&a[i],&b[i]);
} for(i=;i<n;i++)
{
for(int j=;j<n-i-;j++)
{
if((a[j]/b[j])>(a[j+]/b[j+]))
{
t=a[j];
a[j]=a[j+];
a[j+]=t;
t=b[j];
b[j]=b[j+];
b[j+]=t;
}
}
}
i=n-;
for(;i>=&&m;i--)
{
if(m>=b[i])
{sum+=a[i];
m-=b[i];
}
else {
sum+=(m/b[i])*a[i];
m=;
}
}
printf("%.3f\n",sum);
}
return ;
}
05-11 22:43