假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅、綠、藍、綠、紅色,用乙個長度為5的字串表示這個目標:rgbgr。 每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,達到目標。 用盡量少的塗色次數達到目標。
輸入僅一行,包含乙個長度為n的字串,即塗色目標。字串中的每個字元都是乙個大寫字母,不同的字母代表不同顏色,相同的字母代表相同顏色。
僅一行,包含乙個數,即最少的塗色次數。
【樣例輸入1】
aaaaa
【樣例輸入1】
rgbgr
【樣例輸出1】
1【樣例輸出1】
340%的資料滿足:1<=n<=10
100%的資料滿足:1<=n<=50
一開始想的是對於區間x,y,如果兩端顏色相等dp[x][y]=dp中間那段不相等的+1
但這麼做並不能涵蓋所有情況,狀態可能有中斷
所有當兩端相同時,dp[x][y]=min(dp[x][y-1],dp[x+1][y])即可
若不相同就劃分成兩個區間,取和的最小值。
1 #include2 #include3 #include4using
namespace
std;
5char a[101];6
int n,dp[101][101];7
intmain()
823 printf("
%d",dp[0][n-1
]);24 }
題解 CQOI2007 塗色
假設你有一條長度為 55 的木版,初始時沒有塗過任何顏色。你希望把它的 5 55個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5 55的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第...
區間dp P4170 CQOI2007 塗色
傳送門 題目描述 假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三...
P4170 CQOI2007 塗色 題解
同步 原題鏈結 簡要題意 一開始你有乙個長度為 n nn 的無色串,每次可以對乙個區間染上相同的顏色。問最少多少次可以形成目標串。告訴你,這題的藍是假的,太假了,資料也太弱了。完全是個暴力選手亂碾標算用的,其實本題的時間複雜度完全可以做到 o n 3 o n 3 o n3 第一眼看資料範圍還以為是大...