Week4 CSP M1 B 咕咕東想吃飯

2022-06-13 12:24:09 字數 1023 閱讀 1550

咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買ai個生煎。但是生煎店為了刺激消費,只有兩種購買方式:①在某一天一次性買兩個生煎 ②今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二天用券來拿。

沒有其餘的購買方式,這兩種購買方式可以用無數次,但是咕咕東是個節儉的好孩子,他考試結束就走了,不允許考試結束時手裡有券。咕咕東非常有錢,你不需要擔心咕咕東沒錢,但是咕咕東太笨了,他想問你他能否在考試周每天都能恰好買ai個生煎。

需要補充的題意:只要手裡有昨天買的券,今天就必須用,否則就是失敗;最後一天,不能再用第二種方式買生煎。

①要買就買乙個券,買多個券沒有必要 

②第i天,當ai是奇數時,如果需要買券,只需要買1個券;如果有券,就不買券

③第i天,當ai是偶數時,如果有券,就再買乙個券,如果沒券,就不買券

為什麼以上思路是正確的?即為何沒有必要買多個券?

假設我買了m個券,m>=2,則m=2k+1或m=2k;

當m=2k時,第二天完全可以用k次買兩個生煎,而不必要在今天冒險買券

當m=2k+1時,只有1個券是必須買的,剩下2k個券,第二天完全可以用k次買兩個生煎,而不必要在今天冒險買券

還是那句話,先對問題進行,抽象,分析,再做;好像有一點貪心的感覺

上述證明好像是利用了「貪心得到的結果不會比最優解差」

1 #include 2 #include 3

using

namespace

std;

4int

main()516

else

if(t==0&&last==1) //

要買零個生煎

1721

else

if(last==1) last=1; //

要買偶數個生煎22}

23if(last==1) cout<<"no"

<24else cout<<"

yes"

<25return0;

26 }

Week4 CSP M1 B 咕咕東想吃飯 模擬

演算法 思路分析 咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買ai個生煎。但是生煎店為了刺激消費,只有兩種購買方式 在某一天一次性買兩個生煎。今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二天用券來拿。沒有其餘的購買...

Week 4 CSP M1 咕咕東想吃飯

咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買 a i 個生煎。但是生煎店為了刺激消費,只有兩種購買方式 在某一天一次性買兩個生煎。今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二天用券來拿。沒有其餘的購買方式,這兩種...

CSP M1 B咕咕東想吃飯

考試周共有n天,每天需要買ai個生煎,只有兩種購買方案,一是某一天一次性買兩個,二是今天買乙個,同時為明天買乙個,店家給乙個券,第二天用券來拿。同時考試周結束時不允許手上有券。請給出是否每天都能恰好買ai個生煎。如果第i天要買的ai為偶數則可以選擇方案一購買,且對其他天不產生影響,若ai為奇數則選擇...