動態規劃訓練之十七

2022-01-29 08:39:51 字數 943 閱讀 2924

題目描述:

求所有(0,0)走到(n,m)路線(k^矩形個數)

分析:

考慮如果只是求方案數的話

很簡單乙個遞推dp[i,j]=dp[i-1,j]+dp[i,j-1];

也是乙個組合數c(n+m,n)

再考慮把面積加上進行遞推

重新定義dp[i,j]:走到(i,j)之前所有方案的k矩形個數和

如果我們考慮每次豎著看一列矩形的面積時:

dp[i,j]=dp[i,j-1]×kj+dp[i-1,j]

如果我們考慮每次橫著看一排矩形的面積時:

dp[i,j]=dp[i,j-1]+dp[i-1,j]×ki

考慮將兩個式子進行合併

j=j-1(轉化為dp[i,j]這樣的形式)

同理dp[i-1,j+1]×(kj+2-1)=dp[i-2,j+2]×(ki-1-1)

最後一定會到達終止邊界dp[0,i+j]=1

所以dp[i,j]=(ki-1)×(ki-1-1)×....(k1-1)/(kj-1)×(kj+1-1)×.....×(kj+i-1-1)

這樣直接線性遞推就好

因為只用交答案,慢點也無所謂

動態規劃訓練之十七

今天的考試題目中有單調佇列優化dp的,感覺不太熟練,所以練幾手題 其實這題就是今天的t2!首先是dp很明確 dp i,0 表示處理了前i個位置,並且第i個位置不選的最大值 dp i,1 表示處理了前i個位置,並且第i個位置要選的最大值 明顯dp i,0 max dp i 1,0 dp i 1,1 d...

動態規劃訓練之十九

題目大意 o n 求出乙個序列的本質不同的子串行個數 考慮動態規劃 dp i 表示前i位子序列的個數 很顯然如果沒有本質不同的話,子串行個數等同於子集的個數就是2n 1 但關鍵就在於這個本質不同?怎麼辦?當然考慮容斥 記vis a i 表示上一次a i 出現的位置 只要dp的時候減掉dp vis a...

動態規劃訓練之九

首先能夠想到是狀壓dp模板 取dp state,i,j 表示state狀態下倒數第二個島為i,最後乙個島為j時的最優解,num state,i,j 為相應的路徑數目,其中state的二進位制表示的i位為1表示島i被訪問過,反之為0。則顯然當有邊 i,j 存在時,有如下初值可賦 dp 1,表示此時可以...