UPC 購買巧克力(貪心)

2021-10-05 10:31:06 字數 1594 閱讀 7815

時間限制: 1 sec 記憶體限制: 128 mb

[提交] [狀態]

題目描述

shoi這次科技競賽取得了好成績,想慶祝一番,他手頭總共有m元,購買巧克力來讓同學分享快樂。他在sh商店逸擇購買,在巧克力商品櫃中共有n塊巧克力,每塊巧克力的**是a[i]元.商家為了**,提供給他k張優惠券,使用方法是:對於每塊巧克力,如果使用一張優惠券,則可以以b[i]的***格購買.注意每塊巧克力只能使用一張優惠券,只能購買一次。

shoi想知道自己最多可以購買多少塊巧克力?

輸入

第一行三個整數n,k,m(0≤k≤n≤100000,m≤1014)。接下來n行,每行兩個整數,表示a[i]和bi。

輸出

乙個整數表示最多購買巧克力數。

樣例輸入 copy

4 1 7

3 22 2

8 14 3

樣例輸出 copy

3提示

樣例解釋:選擇第1、2、3塊巧克力,其中第三塊使用優惠券,總共5元。

對於20%的資料n≤10。

對於50%的資料:n≤100

對於100%的資料:n≤100000

又被貪心搞了,wa7次

思路:

很簡單的思路,先把所有的優惠券都用完,要想要花錢最少並且數量最多的話,就按照b排序。

然後再從剩下的商品裡看最多能買多少,這時候就需要按照a排序了。

要注意乙個商品只能用一次,所以要再加個標記。

菜的真實

#include

using

namespace std;

typedef

long

long ll;

inline ll read()

while

(ch>=

'0'&&ch<=

'9')

return x*f;

}const

int maxn=

1e6+7;

ll n,k,m;

struct node

;node a[maxn]

;bool

cmp1

(node a,node b)

bool

cmp2

(node a,node b)

intmain()

sort

(a+1

,a+1

+n,cmp1)

;int res=0;

for(

int i=

1;i<=k;i++)}

if(m<=0)

sort

(a+1

,a+1

+n,cmp2)

;for

(int i=

1;i<=n;i++)if

(!a[i]

.flag)

if(m<=0)

} cout

}

P2983 USACO10FEB 購買巧克力

題解 注意題目開 long long 貪心策略 從低到高,買夠為止 反證 若剩下的有乙個k 比k小,那麼交換,穩賺不賠 所以,在買k之前,所有比他便宜的都買完了 include include include include include include include include using...

裝備購買 線性基 貪心

裝備購買 solution 貪心 線性基。由於線性基能夠錶出的線性空間和原數表出的線性空間相同,所以只需要在高斯消元求線性基的過程中貪心選取 最低的行 向量 即可。code include include include include include define rg register defi...

貪心 洛谷 3173 HAOI2009 巧克力

題目 既然每一刀都要切,那肯定代價越大的要越早切,考慮按代價降序排序,如果切了一行,求切列的時候貢獻的行數就多了1。include include include define rr register using namespace std struct reca 20011 int n,m,ans...