危險的組合

2022-08-01 08:39:14 字數 755 閱讀 6338

題意:n個盒子擺放成一排,當有3個以上u擺放在一起的時候,就會有危險,求總共有多少種危險的情況。

案例:sample input45

0sample output38

分析:這題思路跟之前發布的不容易事件類似。

每放置乙個新的盒子,都對應2種情況:設dp[n]=當盒子數目為n的情況下,符合要求(出現連續三個u)的放置方法的情況個數。

1. 前面n-1個盒子已經能符合要求,則第n個盒子無論是u還是l,都滿足情況。情況有(2*dp[n-1])種。

2. 前面n-1個盒子不能符合要求,即只有最後4個滿足情況luuu並且前面並沒有連續的三個u的情況才能滿足情況。有((1<<(n-4))-dp[n-4])種情況。

(1<<(n-4))為n-4個盒子放置的總情況數,dp[n-4]為n-4個盒子放置出現危險(有連續三個u出現)的情況數。最後四個盒子僅一種擺法,可忽略。

狀態轉移方程:

dp[n]=2*dp[n-1]+(1<<(n-4))-dp[n-4]

源**:

1 #include2 #include3

long

long dp[100];4

intn,ans;

5int

main()614

while(scanf("

%d",&n)&&n)

15 printf("

%lld\n

",dp[n]);

16return0;

17 }

遞推,計數(危險的組合,uva 580)

dp i 是n i時的答案。此時有很多決策,即第乙個uuu放 顯然第乙個uuu最小可以從1開始放,最大可以從i 2開始放。第乙個uuu前面必須放l,然後l前面不能有uuu,因此前面的方案數為2 j dp j 後面隨便放。後面乘以前面就是這個決策的總方案數。所有決策的和加起來就是答案。includeu...

UVA 580 危險的組合(數論 計數原理)

設答案為f n 以3個u為分類依據,讓i,i 1,i 2成為3個u,這樣i前面的可以不需要3個u,但是有乙個問題,如果前i 1為u,那麼i 1,i,i 1還是可以組成3個u,這樣就不符合從第i個開始為至少3個u了,所以我們要剔除掉這種情況,可以強制讓i 1為l,這樣把i 1前面的可排列數量和i 2後...

指標的危險

指標的危險 下面的 有沒有問題?如果有的話,問題在 intarray array size int pi for pi array 0 pi array array size 有兩個錯誤。對增值後的指標進行解引用時,陣列的第乙個元素並沒有被清零。另外,指標在越過陣列的右邊界以後仍然進行解引用,它將把...