懒虫小鑫
roblem Description
小鑫是個(gè)大懶蟲(chóng),但是這一天媽媽要小鑫去山上搬些礦石去城里賣以補(bǔ)貼家用。小鑫十分的不開(kāi)心。不開(kāi)心歸不開(kāi)心,小鑫還是要做這件事情的。 我們把這個(gè)事情簡(jiǎn)化一下。有n塊礦石,設(shè)第i塊礦石由兩個(gè)數(shù)字wi和pi表示。分別表示這塊石頭的重量和可以賣的價(jià)錢。小鑫每次只能搬一塊礦石去城里賣,所以他決定每次都會(huì)搬重量最小的那塊。如果恰好有幾塊重量相等,那就在這幾塊中挑選價(jià)值最高的帶走。 由于路程原因。小鑫每天只能打m個(gè)來(lái)回,也就意味著他只能賣掉m塊礦石。你能計(jì)算出他能得到多少錢么?Input
輸入數(shù)據(jù)有多組,到文件結(jié)束。 對(duì)于每一組數(shù)據(jù),第一行為n,m。m≤n≤10000。 接下來(lái)有n行,每行兩個(gè)數(shù)代表石頭的w與p。Output
對(duì)于每組數(shù)據(jù),輸出有一行為一個(gè)數(shù),為答案。Example Input
4 2 1 2 1 3 2 2 3 4Example Output
5
#include <stdio.h>
#include <stdlib.h>
struct node
{
? ? int w,p,h;
}a[10001],t;
void q(struct node a[],int l,int r)//快速排序;
{
? ? struct node key=a[l];
? ? int i=l,j=r;
? ? if(l>=r) return;
? ? if(l<r)
? ? {
? ? while(i<j)
? ? {
? ? ? ? while(i<j&&a[j].w>key.w) j--;
? ? ? ? while(i<j&&a[j].w==key.w)//質(zhì)量相等則選價(jià)格高的;
? ? ? ? {
? ? ? ? ? ? if(a[j].p>key.p) break;
? ? ? ? ? ? else
? ? ? ? ? ? ? ? j--;
? ? ? ? }
? ? ? ? a[i]=a[j];
? ? ? ? while(i<j&&a[i].w<key.w)
? ? ? ? ? ? i++;
? ? ? ? while(i<j&&a[i].w==key.w)
? ? ? ? {
? ? ? ? ? ? if(a[i].p<key.p) break;//質(zhì)量相等,則選價(jià)格高的;
? ? ? ? ? ? else i++;
? ? ? ? }
? ? ? ? a[j]=a[i];
? ? }
? ? a[i]=key;
? ? q(a,l,i-1);
? ? q(a,i+1,r);
}
}
int main()
{
? ? int i,m,n,c;
? ? while(~scanf("%d%d",&n,&m))
? ? {
? ? ? ? c=0;
? ? ? ? for(i=0;i<n;i++)
? ? ? ? ? ? scanf("%d%d",&a[i].w,&a[i].p);
? ? ? ? q(a,0,n-1);
? ? ? ? for(i=0;i<m;i++)
? ? ? ? ? ? c+=a[i].p;
? ? ? ? printf("%d\n",c);
? ? }
? ? return 0;
}
總結(jié)
- 上一篇: 数据结构实验之排序四:寻找大富翁
- 下一篇: 【总结】字符串匹配: KMP 和 拓展K