設答案為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後面的可排列數量相乘就可以得到正確答案,接下來看邊界,f[0],[1],[2]=0,因為不滿足至少3個u的定義。
此外,n個盒子「沒有3個u放在一起的」方案數為g(n)=2^n-f(n),可以寫出關係式f(n)=2^(n-3)+
f(n)裡的2^(n-3)為當u在第乙個位置時,不要遺漏這種情況,因為後面的表示式是從2開始的。
#includeusing namespace std;
int f[31];
int main()}
while(scanf("%d",&n) && n)
}
遞推,計數(危險的組合,uva 580)
dp i 是n i時的答案。此時有很多決策,即第乙個uuu放 顯然第乙個uuu最小可以從1開始放,最大可以從i 2開始放。第乙個uuu前面必須放l,然後l前面不能有uuu,因此前面的方案數為2 j dp j 後面隨便放。後面乘以前面就是這個決策的總方案數。所有決策的和加起來就是答案。includeu...
Uva 580 排列組合
我發現數學還是很有用的 o 想了一節課才推出式子,數學競賽的一會就想出來了orz.要看排列組合的書了.推導過程有時間在寫估計不會了 code include include include include include include include define fo i,a,b for int...
數論基礎之組合數 計數問題
一.組合數 問題引入 現在有 n 個球,取其中的 k 個球,問一共有多少 種方式?答案 公式直觀解釋 我們考慮有順序地取出 k 個球 第一次有 n 種選擇,第二次有 n 1 種 選擇,第 k 次有 n k 1 種選擇。故一共有 種方案數 但如果不計算順序的話,那麼對於一種方案,其實有 k 種 不同的...