我不討論藍橋杯的好壞,也不吹捧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 ...