思路很神奇:f[i][j],長度為i的擺動序列,第一段下降,第一座山峰相對高度在[1,j]的總方案數。同理,設g[i][j]為長度為i的擺動序列,第一段上公升,第一座山峰相對高度在[1,j]的總方案數。
很明顯f[i][j]=f[i][j-1]+g[i-1][j-1].
是不是還要維護個g啊。。。不用。對於長度為i**相對**高度分別為ai的山,把每一段都改為i-ai+1,就會生成上公升下降完全相反且相對不變的山。因為是相對高度,所以結論還是很明顯的。所以f[i][j]=g[i][i-j+1],那g[i-1][j-1]=f[i-1][i-j]
所以轉移方程變成了f[i][j]=f[i][j-1]+f[i-1][i-j]。所以只需要著乙個陣列了。
還有乙個問題,當前去找開頭相對高度為j,下降的山時,接上了一段開頭為i-j,長度i-1的上公升的山,方案裡並不會出現與j重複的山.因為長度為i-1,所以相對高度在1~i-1之間。也就是說在[1,j-1]∪[j,i-1],那麼我們把[j,i-1]全部加1,就成了[j+1,i],成功把相對高度為j的位置讓了出來而且這個區間的相對值並不變。
我的天。這題思維含量真高,並且**及其濃縮。
#include
#define ll long long
int n,p;ll f[2][4205];
int main()
DP Sdoi2010 地精部落
思路很神奇 f i j 長度為i的擺動序列,第一段下降,第一座山峰相對高度在 1,j 的總方案數。同理,設g i j 為長度為i的擺動序列,第一段上公升,第一座山峰相對高度在 1,j 的總方案數。很明顯f i j f i j 1 g i 1 j 1 是不是還要維護個g啊。不用。對於長度為i 相對 高...
SDOI2010 地精部落
求1 n的全排列數目,使得對於 i geq 3 a a 的大小關係與 a a 的大小關係不同 題目還有另外一種格式 求一種全排列,使得這個排列要麼滿足奇數項的高度比相鄰位置都大,要麼滿足偶數項的高度比相鄰位置都大.設 dp 表示用了前 i 個數字,a 1 j 且 a 1 a 2 時的方案數 有乙個神...
SDOI2010 地精部落
這道題是一道 dp 題,思維難度比較大。題意 先定義波形陣列 滿足當 i 全為奇數或偶數時,a i a i 1 且 a i a i 1 求 n 的全排列中有多少個符合波形陣列。我們記錄狀態為 f i j 0 1 i 為剩下 i 個數,j 表示有 j 1 個數小於剛剛選擇的數,當第 3 個下標為 0 ...