c++貪心題目

 

 

Input

輸入數據首先包含一個正整數C,表示有C組測試用例,每組測試用例的第一行是兩個整數n和m(0 < n <= 1000, 0 < m <= 1000 ),分別表示經費的金額和大米的種類,然後是m行數據,每行包含2個整數p和h(1 <= p <= 25,1 <= h <= 100),分別表示單價和對應大米的重量。

Output

 對於每組測試數據,請輸出能夠購買大米的最多重量(你可以假設經費買不光所有的大米)。

每個實例的輸出佔一行,保留2位小數。

Example Input

1
7 2
3 3
4 4

Example Output

2.33

Hint

hdoj2187

題解:求的是最大重量,所以貪心方案是先挑便宜的買。

#include<bits/stdc++.h>
using namespace std;
struct rice
{
    int p;
    int w;
}r[10000], t;
int main()
{
    int c, n, m;
    int i, j;
    double w;
    cin>>c;
    while(c--)
    {
        cin>>n>>m;
        for(i = 0; i < m; i++)
        {
            cin>>r[i].p>>r[i].w;
        }
        for(i = 0; i < m; i++)
        {
            for(j = 0; j < m - i -1; j++)
            {
                if(r[j].p > r[j+1].p)
                {
                    t = r[j];
                    r[j] = r[j+1];
                    r[j+1] = t;
                }
            }
        }
        i = w = 0;
        while(n)
        {
            if(n > r[i].p * r[i].w)
            {
                n = n - r[i].p * r[i].w;
                w += r[i].w;
                i++;
            }
            else
            {
                w += n * 1.0 / r[i].p;
                n = 0;
            }
        }
        printf("%.2lf\n", w);
    }
    return 0;
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章