SDUT 1309 不老的傳說問題 (區間DP)

2022-05-16 03:21:58 字數 1175 閱讀 5055

題意:

有乙個環形序列,n個數字表示一種顏色,要求將白板環刷成一模一樣的環,限制是每次最多只能刷連續的k個位置,問最少需要刷幾次?

思路:跟2008長春那道painter string 差不多。只是這次是個環,難度也是沒有提公升的,只需要變成乙個2*n-1個數字的序列就可以了。

考慮區間[l,r],如果[l]和[l+1,r]中的某乙個顏色相同,才有可能減少刷的次數。那麼從左到右列舉這個和[l]相同顏色的位置,[l,r]的次數就可以變成[l+1,k]+[k+1,r]了。可以想象成[l]是依靠另乙個同顏色的位置來獲得免刷的可能,則這個位置必定是距離它k個位置之內的。如果長度為k的某一段區間[l,l+k-1]中有多段分散的同顏色的,有沒有可能是刷一次那個顏色,然後其他不同顏色的再截成一段一段的,將次數給組合起來呢?其實這種情況在列舉依靠位置k的時候已經考慮了,假設你選擇依靠[l+k-1],那麼[l+1,l+k-2]中還有和[l]是同顏色的,而區間[l+1,l+k-1]已經是最優,其他的同色位置能不能也依靠[l+k-1]已經不是本次要考慮的問題了,本次只考慮能否讓[l]依靠其他的位置從而獲得免刷。

1

//#include

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10

#define pii pair11

#define inf 0x7f3f3f3f

12#define ll long long

13using

namespace

std;

14const

double pi = acos(-1.0

);15

const

int n=410;16

intn, c, k;

17int

dp[n][n], a[n];

18int

cal()

1934}35

}36int ans=inf;

37for(int i=1; i<=n; i++)

3841

return

ans;42}

4344

intmain()

4554 cout

56return0;

57 }

ac**

不老的傳說

一位先知告訴dynamic,在遙遠的地方,有一處不老的泉水,在那裡,他可以找到他人生的意義。按照先知的指引,dynamic出發了。翻越雪山,穿過叢林,渡過汪洋,終於來到了沙漠的最深處。按照先知的說法,泉水就在這個地方。然而除了無盡的黃沙之外,什麼都沒有。dynamic幾乎絕望了,他盲目地走著,突然來...

不老的傳說 轉

傳說在很久很久以前,軟體界出過一位大師。他能直接用二進位制編寫複雜高效且無錯的程式 他寫過的機器碼比我們吃過的公尺還要多 他用眼睛看看閃爍的硬碟燈就知道程式當前的執行狀態 他用耳朵聽聽機器的噪音就可以準確地判斷出錯誤在哪個模組的哪一行 上。他寫的程式極為精簡,10行 就可以頂別人寫的100行 且效率...

C語言,不老的傳說

最受歡迎的歌一定是被聽得最多的,那麼最受歡迎的語言一定是被用得最多的。c語言現在用的多嗎?在業界,一般的答案是 如果一件事可以用x語言做,就一定不要用c語言做 這裡的x可以代指任何語言。天啊,這好像是再說 如果可以聽x的歌,就一定不要聽周杰倫的歌 這是在評價周杰倫還是曾軼可啊?哪種程式語言是最受歡迎...