[gmoj 3505]【NOIP2013模拟11.4A组】积木
生活随笔
收集整理的這篇文章主要介紹了
[gmoj 3505]【NOIP2013模拟11.4A组】积木
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路:
水解:O(n2n^2n2)
考慮轉化問題,判斷合法性。
經過推理,我們得知每一個變量和上一個至多相差 1 。上一個變量是 2 的話,這一個只能取 3 或者 2 或者 1 。
題目可以轉化為這幅圖,a和b代表兩個確定高度,求:
從a開始,每次可以向右上/右/右下走,不能越過紫線,求到b點的方案數
因為相鄰兩塊積木的高度 如果相差超過 2 22 的話,無法構造。(這點應該清楚)
然后我們就可以DP 來計算方案數了。
設f[i][j] 表示 已經處理完前 i?1 個數之后,當前 第i 個數 選擇了j 高度 的合法方案數。
即按照它相鄰兩個數相差≤1\le 1≤1 的性質,我們即可推出下列柿子:(當 ai=?1a_i=-1ai?=?1 時)
f[i][j]=f[i?1][j?1]+f[i?1][j]+f[i?1][j+1]f[i][j]=f[i-1][j-1]+f[i-1][j]+f[i-1][j+1]f[i][j]=f[i?1][j?1]+f[i?1][j]+f[i?1][j+1]
特別地,對于越界的訪問(比如 j=1 或者j=num[i?1] )就不統計越界的答案。
ai>?1a_i>-1ai?>?1時特判即可,不需要枚舉j 。
最后這個 f 數組還要取模。
總結
以上是生活随笔為你收集整理的[gmoj 3505]【NOIP2013模拟11.4A组】积木的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: socket第三方库nbsp;Async
- 下一篇: 计算机组成原理实验脱机运算器,计算机组成