Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
小鑫是個大懶蟲,但是這一天媽媽要小鑫去山上搬些礦石去城裏賣以補貼家用。小鑫十分的不開心。不開心歸不開心,小鑫還是要做這件事情的。
我們把這個事情簡化一下。有n塊礦石,設第i塊礦石由兩個數字wi和pi表示。分別表示這塊石頭的重量和可以賣的價錢。小鑫每次只能搬一塊礦石去城裏賣,所以他決定每次都會搬重量最小的那塊。如果恰好有幾塊重量相等,那就在這幾塊中挑選價值最高的帶走。
由於路程原因。小鑫每天只能打m個來回,也就意味着他只能賣掉m塊礦石。你能計算出他能得到多少錢麼?
Input
輸入數據有多組,到文件結束。
對於每一組數據,第一行爲n,m。m≤n≤10000。
接下來有n行,每行兩個數代表石頭的w與p。
Output
對於每組數據,輸出有一行爲一個數,爲答案。
Sample Input
Sample Output
Hint
Source
#include <stdio.h>
#include <stdlib.h>
struct node
{
int w;
int p;
} z[10010], t;
int main()
{
int n, m, i, j, sum, k;
while(~scanf("%d%d",&n, &m))
{
sum = 0;
for(i = 0; i < n; i++)
{
scanf("%d%d",&z[i].w,&z[i].p);
}
for(i = 0; i < n - 1; i++)
{
k = i;
for(j = i + 1; j < n; j++)
{
if(z[j].w < z[k].w)
{
k = j;
}
else if(z[j].w == z[k].w)
{
if(z[j].p > z[k].p)
{
k = j;
}
}
}
if(k != i)
{
t = z[k];
z[k] = z[i];
z[i] = t;
}
}
for(i = 0; i < m; i++)
{
sum += z[i].p;
}
printf("%d\n",sum);
}
return 0;
}