懒虫小鑫

来源:互联网 发布:数据库第五版课后答案 编辑:程序博客网 时间:2024/04/30 02:40

Problem Description

小鑫是个大懒虫,但是这一天妈妈要小鑫去山上搬些矿石去城里卖以补贴家用。小鑫十分的不开心。不开心归不开心,小鑫还是要做这件事情的。
我们把这个事情简化一下。有n块矿石,设第i块矿石由两个数字wi和pi表示。分别表示这块石头的重量和可以卖的价钱。小鑫每次只能搬一块矿石去城里卖,所以他决定每次都会搬重量最小的那块。如果恰好有几块重量相等,那就在这几块中挑选价值最高的带走。
由于路程原因。小鑫每天只能打m个来回,也就意味着他只能卖掉m块矿石。你能计算出他能得到多少钱么?

Input

输入数据有多组,到文件结束。
对于每一组数据,第一行为n,m。m≤n≤10000。
接下来有n行,每行两个数代表石头的w与p。

Output

对于每组数据,输出有一行为一个数,为答案。

Example Input

4 21 21 32 23 4

Example Output

5

Hint

 

Author

lin

总是超时。。。要用高级点的排序(尴尬自己还不会用)

01#include<stdio.h>
02struct stone
03{
04    int w, p;
05} a[10005], t;
06int main()
07{
08    int n, m, i, num, j, k;
09    while(scanf("%d%d", &n, &m) != EOF)
10    {
11        num = 0;
12        for(i = 0; i < n; i++)
13        {
14            scanf("%d%d", &a[i].w, &a[i].p);
15        }
16        for(i = 0; i < n - 1; i++)
17        {
18            k = i;
19            for(j = i + 1; j < n; j++)
20            {
21                if(a[j].w < a[k].w)
22                {
23                    k = j;
24                }
25                else if(a[j].w == a[k].w && a[j].p > a[k].p)
26                {
27                    k = j;
28                }
29            }
30            if(k != i)
31            {
32                t = a[k];
33                a[k] = a[i];
34                a[i] = t;
35            }
36        }
37        i = 0;
38        while(m > 0)
39        {
40            num += a[i].p;
41            m--;
42            i++;
43        }
44        printf("%d\n", num);
45    }
46    return 0;
47}

0 0
原创粉丝点击