寒假作业第二组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;
}

 

posted @ 2016-01-25 21:37  GeniusYang  阅读(191)  评论(0编辑  收藏  举报