從一道題目看藍橋杯與ACM的區別

2021-07-03 03:18:19 字數 1686 閱讀 2332

我不討論藍橋杯的好壞,也不吹捧acm,就從一道題目來看兩者的區別。當然我並不是用前者的一道簡單題和world final的真題來進行比較,不然就沒有意義了,這篇部落格的意義就在於前者和後者思考問題思路的不同之處。

廢話說完,看題。藍橋杯某題:一副撲克牌,去掉大小王,剩52張牌,均分給4人,每人13張牌,若不計花色,則這13張牌的可能序列有多少種?-->這原本是一道經典的多重集組合問題,用dp求解(秋葉拓哉--挑戰程式競賽),但還是從頭開始看吧。

拿到題目,其一:固定的輸入資料,其二:沒有指明執行效率。於是誕生了第一種想法,暴力+for迴圈。

#include #include #include #include #include #include using namespace std;  

int main()

printf("%d",ans);

return 0;

}

引用了某釗的**。

的確通俗易懂(qaq)。

第一是如果是不固定的資料組數呢?for迴圈就沒法解決了,但是誰讓題目是死的呢。於是有了第二個思路,暴力+dfs

#include#include#include#includeusing namespace std;

int res;

void dfs(int number,int ans)

for(int i=0;i<=4;i++)

dfs(number+1,ans+i);

}int main()

然後就是等待數秒後,會出現正確答案,注意,是等待數秒。用dfs的好處是,如果題目改變輸入,也可靈活得到答案,其二,不用機械性的敲13個for迴圈。但是作為乙個acmer,應該考慮的不是這些問題,而是如何設計出1s的程式。

於是誕生了dp求解此題:

一共13種牌,dp[i][j]表示在前i種中選取j張的可能情況。

狀態轉移方程:dp[i][j]=dp[i][j-k]+..d[i][j](k從0到min(j,a[i]))  a[i]表示每種牌的個數

#include #include #include #include #include #include #include #include using namespace std;

#define rd(x) scanf("%d",&x)

#define rd2(x,y) scanf("%d%d",&x,&y)

#define rd3(x,y,z) scanf("%d%d%d",&x,&y,&z)

int dp[100][100];

int w[100];

void solve(int n,int m)

printf("%d\n",dp[n][m]);

}//3598180

int main()

{ int n,m;

while(~rd2(n,m))

{for(int i=0;i

怎麼說呢,藍橋杯也並不是水,考的比較差的我也沒這個資格說,但是對於一直在刷acm題的我來說,也讓我發現了很多漏洞,好比說,經典的dfs還沒有掌握,dp的知識也暫時沒有涉及太多,樹形dp,狀壓dp.etc 都還沒做。總之我感覺acm更多的是鍛鍊人的思維,而藍橋杯則更偏向於對經典演算法的涉獵程度,當然我並不是說acm涉獵不廣,兩者的難度我相信不用我比較也是不言而喻的,那麼就藉此題給之前自以為是的我畫個句號吧。

一道簡單的acm題目

acm協會主席alphard決定在除夕夜辦一場山寨春晚,立即得到廣大acmer的支援。報名的acmer眾多,主席已經開始忙不過來了。幸好有 細心 的angelclover幫忙,把報名參加山寨春晚的節目單按照預演時間進行了歸類。alphard要求春晚不要超過4小時,但為了不打擊廣大acmer的積極性,...

c 2019到2020的一道藍橋杯題目

第二題 難度係數4,滿分50分 程式設計實現 還差多少天到2020年?時光飛逝,轉眼間就到了2019年的最後乙個月,小藍也在期盼著2020年的到來,那意味著小藍又長大了一歲。你能幫小藍計算一下還有幾天就到2020年了嗎?程式命名 newyear.cpp 輸入 兩個整數 month,day 表示201...

一道導數與不等式結合的題目

已知 e x a 2 x geqslant b 2 對任意 x in r 恆成立,則 dfrac 的最大值為 解析 記 f x e x a 2 x 則 f x e x a 2 由於 e x a 2 x geqslant b 2 對任意 x in r 恆成立,則函式 f x 一定有下界,從而 a 2 ...