題目大意:
已知有k個數,它們之間可以兩兩配對或者不配對,一旦有一對配對上了,其它數字都不可以和它們任意乙個數字配對。問總共有多少種方案。
例如1和2配對了,那麼2和3就不應該配對。
解題思路:
這道題考查了我們對動態規劃無後效性的理解。當我們走到第i個數時,我們會想這時候需不需要考慮前面的配對情況。比如在上面的圖,我去到第三個了,我想和第二個進行配對,但是萬一第二個已經和第乙個配對了呢?這裡的關鍵就是告訴我們,不需要考慮前面是否已經配對。直接把3和2進行配對就可以了。我們可以看一下遞迴公式:
首先第一項g(i-1)就是說走到這項時候我們不和前面配對的情況。第二項g(i-2)*(i-1)就是考慮配對的情況,我們這時候有i-1個選擇,剩下的有g(i-2)個方案。這時候情況就羅列全了,比如對於g(3),當1和2進行配對,其實對應的是g(i-1)的情況,剩下的情況大家試著看是不是已經羅列全了。
廢話:其實這題也告訴我們,在求解動態規劃時候,為了把情況全部列舉完成,到底需要什麼作為狀態。
#include #define int long long
using namespace std;
const int modn=14233333;
int32_t main()
int gl,gll,gcur;
gcur=gl=gll=1;
for(int i=1;i
cout<
return 0;
}
洛谷 P3795 鍾氏對映
2233年,cssyz學校的數學老師兼數學競賽顧問鐘jg已經2200 歲啦!為了慶生,他或她給廣大人民群眾出了道題。設集合n m 設 ff 為 nn 到 mm 的對映。求滿足 f f x x 的不同的對映 ff 的個數,由於答案較大,輸出答案對 14233333取餘的數即可。輸入格式 輸入乙個正整數...
luogu P3795 鍾氏對映(遞推)
也就是給n個點,把他們乙個分為一組,或兩個分為一組,有多少種方法。空間大點隨便做。我們靠遞推。乙個新點,要不自己一組,要不和前面的乙個點構成一組。所以f 0 f 1 1 f i f i 1 f i 2 i 1 就行了 1 include2 include3 include4 include5 inc...
埃氏篩 洛谷P3383埃氏篩模板
思路 如果我們要篩出 1,n 內的所有素數,使用 1,n 內的素數去篩就可以了 設bool型陣列 a,a i 表示 i 是否被某個素數篩過 從 2 開始列舉每個數 i 若 a i false,表示 i 沒有更小的素因子,從而知道 i 是素數。列舉 i 的所有倍數 j,令 a j 1 如下 inclu...