Problem Description
小鑫是个大懒虫,但是这一天妈妈要小鑫去山上搬些矿石去城里卖以补贴家用。小鑫十分的不开心。不开心归不开心,小鑫还是要做这件事情的。
我们把这个事情简化一下。有n块矿石,设第i块矿石由两个数字wi和pi表示。分别表示这块石头的重量和可以卖的价钱。小鑫每次只能搬一块矿石去城里卖,所以他决定每次都会搬重量最小的那块。如果恰好有几块重量相等,那就在这几块中挑选价值最高的带走。
由于路程原因。小鑫每天只能打m个来回,也就意味着他只能卖掉m块矿石。你能计算出他能得到多少钱么?
Input
输入数据有多组,到文件结束。
对于每一组数据,第一行为n,m。m≤n≤10000。
接下来有n行,每行两个数代表石头的w与p。
Output
对于每组数据,输出有一行为一个数,为答案。
Sample Input
4 2 1 2 1 3 2 2 3 4
Sample Output
5
01 |
#include <stdio.h> |
02 |
#include <stdlib.h> |
03 |
04 |
struct node |
05 |
{ |
06 |
int p; |
07 |
int w; |
08 |
}s[10001],t; |
09 |
int main() |
10 |
{ |
11 |
int n,m,j,i; |
12 |
while ( scanf ( "%d%d" ,&n,&m)!=EOF) |
13 |
{ |
14 |
for (i=0;i<=n-1;i++) scanf ( "%d%d" ,&s[i].w,&s[i].p); |
15 |
for (i=0;i<=n-2;i++) |
16 |
{ |
17 |
int k=i; |
18 |
for (j=i+1;j<=n-1;j++) |
19 |
{ |
20 |
if ((s[k].w>s[j].w)||(s[k].w==s[j].w&&s[k].p<s[j].p)) |
21 |
{ |
22 |
k=j; |
23 |
} |
24 |
} |
25 |
if (k!=i) |
26 |
{ |
27 |
t=s[i];s[i]=s[k];s[k]=t; |
28 |
} |
29 |
}//选择排序比冒泡排序要快,但是单纯的选择排序也超时 |
30 |
int x=0; |
31 |
for (i=0;i<=m-1;i++) |
32 |
{ |
33 |
x=x+s[i].p; |
34 |
} |
35 |
printf ( "%d\n" ,x); |
36 |
} |
37 |
return 0; |
38 |
} |