遞迴與遞推 鑰匙計數之一

2021-09-29 14:42:27 字數 994 閱讀 8769

hdu - 1438 

一把鎖匙有n個槽,槽深為1,2,3,4。每鎖匙至少有3個不同的深度且至少有1對相連的槽其深度之差為3。求這樣的鎖匙的總數。

input

本題無輸入

output

對n>=2且n<=31,輸出滿足要求的鎖匙的總數。

sample output

n=2: 0

n=3: 8

n=4: 64

n=5: 360

....

....

....

..n=31: ...

注:根據pku judge online 1351 number of locks或 xi'an 2002 改編,在那裡n<=16

【分析】

我做的時候沒有將遞迴/遞推的思想融進去,一直在想它排列組合的規律,而並沒有將其中每一項與其前一項聯絡起來,因為我覺得這每一種情況增加乙個「鑰匙槽」得到的下一種情況需要重新考慮,太離散,實際上遞推分情況考慮可以分析出來。

我們用a[i]來表示i個槽的滿足要求的鑰匙的總數。

則a[i]與a[i-1]之間有如下情況:

i-1個槽裡有相鄰且相差為3的槽,則前i-1個槽裡一定只有兩種槽1和4,即1和4的全排列減去全為4和全為1的情況,那麼第i個槽一定為3或2:a[i] = [2^(i-1)-2]*2; 

i-1個槽裡沒有相鄰且相差為3的槽,要使i個槽符合要求,則前i-2個槽一定沒有(1,4)或(4,1),且第i-1個槽一定是1或4,最後乙個槽是4或1,前i-2個槽是所有情況4^(i-2)減去只有1和4的情況2^(i-2),到此為止我們只剩前i-1個槽符合要求的鑰匙數沒有被剔除:a[i] = [4^(i-2)-2^(i-2)]*2-b[i-1];

【**】

#include#include#define ll long long

using namespace std;

int main()

return 0;

}

遞推 鑰匙計數之一

題目位址 題目大意 一把鎖匙有n個槽,槽深為1,2,3,4。每鎖匙至少有3個不同的深度且至少有1對相連的槽其深度之差為3。求這樣的鎖匙的總數。思路 這個題本來是在狀壓dp專項裡遇到的,光想狀壓dp了,搜了題解才知道是遞迴。也算是個比較麻煩的遞迴了,分成兩個陣列關係,直接求難求,就轉化成總數,減去不符...

hdu 1438 鑰匙計數之一

題意 略 題解 n 2 0 n 3 8 n 4 64 n 5 360 n 31 注 根據pku judge online 1351 number of locks或 xi an 2002 改編,在那裡n 16 分析 若x是鑰匙,則x加1,2,3,4.都是鑰匙則a i a i 1 4 若x不是鑰匙,加...

hdu 1438 鑰匙計數之一

problem acm.hdu.edu.cn showproblem.php?pid 1438 reference blog.csdn.net u010405898 article details 9530769 blog.csdn.net zoucharming article details 4...