题目:http://vj.bit-studio.cn/contest/209424#problem/E

方法:贪心,有一个巨坑,int x=2,y=3;double z=y/x;y居然会等于1然后搞得我一度怀疑sort有问题,

代码:

#include<iostream>
#include<stdio.h>
#include<map>
#include<algorithm>
using namespace std;
typedef struct mao
{
    int j;
    int f;
    double cm;
}mm;
bool compare(mm f1, mm f2)
{
    return f1.cm>f2.cm;
}
int main()
{
    int m, n;
    while ((cin >> m >> n) && m != -1&& n != -1)
    {
        mm *p = new mm[n];
        for (int i = 0; i < n; i++)
        {
            cin >> p[i].j >>p[i].f;
            double x = p[i].j, y = p[i].f;
            p[i].cm = x / y;
            //cout << p[i].cm << endl;
        }
        sort(p,p+n,compare);
        //for (int i = 0; i < n; i++)
        //{
            //for (int j = i + 1; j < n; j++)
            //{
                //if (p[i].cm < p[j].cm)swap(p[i], p[j]);
            //}
        //}
        double mt=m, nt=0;
        //for(int i=0;i<n;i++)
            //cout << p[i].j << "  " << p[i].f << endl;;
        for (int i = 0; i < n; i++)
        {
            mt -= p[i].f;
            nt += p[i].j;
            if (mt < 0)
            {
                nt -= p[i].j;
                double temp = (mt + p[i].f) / p[i].f*p[i].j;
                nt += temp;
                break;
            }
        }
        printf("%.3f\n", nt);
    }
}