NOIP2017提高A組模擬9 5 NYG的揹包

2021-08-07 20:30:19 字數 1753 閱讀 6074

輸入1:

3 5

3 1

4 8

8 3輸入2:

3 7 9269

21366 1233

7178 23155

16679 23729

15062 28427

939 6782

24224 9306

22778 13606

5 22367

17444 5442

16452 30236

14893 24220

31511 13634

4380 29422

7 18700

25935 4589

24962 9571

26897 14982

20822 2380

21103 12648

32006 22912

23367 20674

輸出1:

yes輸出2:

yes

yes

no各種奇奇怪怪的貪心都能拿很高分

首先對於會使揹包變大的直接加入即可

對於剩下的呢?

題解的方法是按照b排序,從小到大加入

就是假設為yes那麼放入等於刪除,然後就-b+a,然後就和第一種情況一樣了,因為第一種情況是-a+b,結果為正數,這個-b+a結果為正數

我的做法不太一樣

大概是:

對於每種物品,它對m的貢獻是-a+b,乙個負數

而最後乙個放入揹包的物品的貢獻是-a

如果m去掉了所有物品的貢獻,仍然大於等於0,說明是yes

那麼最後乙個就一定是b最小的乙個,因為我要使貢獻減小的盡可能少,最後乙個相比其他多減了乙個b,那麼選最小的b,減少的就最小

正確性好像是對的吧

(如果不正確歡迎大神打臉)

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define n 50100

#define ll long long

using

namespace

std;

int n;

struct nodea[n],b[n];

ll m;

bool cnt(node x,node y)

int main()

sort(a+1,a+t1+1,cnt);

bool bz=1;

fo(i,1,t1) if(m>a[i].x) m=m-a[i].x+a[i].y;else bz=0;

if(bz==0)

sort(b+1,b+t2+1,cnt);

ll jy=0;

fo(i,1,t2) jy=jy-b[i].y+b[i].x;

if(m>=jy) printf("yes\n");else

printf("no\n");}}

Noip2017提高組 乳酪

noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...

NOIP2017提高組 列隊

noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 n,列數為 m 為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學...

NOIP 2017 提高組 寶藏

傳送門 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n nn 個深埋在地下的寶藏屋,也給出了這 n nn 個寶藏屋之間可供開發的 m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...