假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅、綠、藍、綠、紅色,用乙個長度為5的字串表示這個目標:rgbgr。
每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,達到目標。
用盡量少的塗色次數達到目標。
輸入僅一行,包含乙個長度為n的字串,即塗色目標。字串中的每個字元都是乙個大寫字母,不同的字母代表不同顏色,相同的字母代表相同顏色。
僅一行,包含乙個數,即最少的塗色次數。
aaaaa
rgbgr
40%的資料滿足:1<=n<=10
100%的資料滿足:1<=n<=50
設\(f[i][j]\)表示將區間[i,j]內染成對應的顏色的最少操作步數。考慮當i與j的顏色相同時,只需要在首次塗區間[i+1,j]或[i,j-1]的色時多塗一格(反正要滿足i或j也是這個顏色),因此有
\[f[i][j]=min(f[i+1][j],f[i][j-1])
\]當i與j顏色不同時,我們可以將這個區間的狀態拆成兩個子區間合併,列舉斷點k,有
\[f[i][j]=min(f[i][k]+f[k+1][j])
\]
#include #include #include #define n 52
using namespace std;
char c[n];
int n,i,j,k,l,f[n][n];
int main()
} cout
}
洛谷P4170 CQOI2007 塗色
假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...
洛谷 P4170 CQOI2007 塗色
假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...
P4170 CQOI2007 塗色 題解
同步 原題鏈結 簡要題意 一開始你有乙個長度為 n nn 的無色串,每次可以對乙個區間染上相同的顏色。問最少多少次可以形成目標串。告訴你,這題的藍是假的,太假了,資料也太弱了。完全是個暴力選手亂碾標算用的,其實本題的時間複雜度完全可以做到 o n 3 o n 3 o n3 第一眼看資料範圍還以為是大...