該題乍一看和矩陣鏈乘非常類似,但是有乙個不同之處就是該題能夠拼接 。
為了達到這個目的。我們不得不拓展維度d[i][j][k]。用乙個k表示最右邊拼接了k個和a[j]同樣顏色的方塊。
問題的關鍵在於拼接,當右邊存在乙個q < p 且 a[q] == q[j] && a[q] != a[q+1] 時,能夠拼接。要注意,全部滿足這個條件的q都應該遞迴求解,由於哪一部分拼接起來更好,是不一定的 。
細節見**:
#includeusing namespace std;
const int maxn = 205;
int t,n,d[maxn][maxn][maxn],a[maxn],case = 0;
int dp(int i,int j,int k)
if(p == i) return ans = ((j-p+1+k)*(j-p+1+k));//遞迴邊界
for(q=i;qans = max(ans,dp(i,p-1,0) + (j-p+1+k)*(j-p+1+k));//決策1
return ans;
}int main()
return 0;
}
poj 1390 消除方塊 blocks
今天中午從黑書上看到了的一道例題,動態規劃 線性模型的例1題。看書都看不懂!後面還是看了網上的題解,才漸漸明白.估計我也說不清楚,所以盡力好了。樣例 1 2 2 2 2 3 3 3 1 我們建立兩個陣列 color,num.其中,color儲存的是顏色值,num是相同顏色的個數。例如,對上面的樣例來...
UVA10559 方塊消除 費用提前計算
題目鏈結 解析顯然這道題重點在於消掉一些塊之後會產生一些新的連續的塊可以一起消,這個不能想到別的什麼做法,可以考慮區間 dp 不過對於一整坨,你要麼把他們全部一起消掉,要麼就留著等更多的過來一起消掉,你總不可能把一坨分批消掉吧,明顯 x y 2 x 2 y 2 啊 所以剛開始可以把相同顏色的一段塊看...
UVA 10559 Blocks 記憶化搜尋
依然在dp中掙扎的我。今天聽隊友仔細的講了記憶化搜尋與dp的差別 才恍然大悟,01揹包之所以可以寫成迴圈的形式,是因為在求解下一狀態的最優解時,前面的狀態已經解決,但記憶化搜尋解決的問題型別,是子問題與總問題有相類似的結構,因此需要層層遞迴至最底層才能求解。題意就是消除方塊嘛,得分是個數的平方。然後...