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