一位先知告訴dynamic,在遙遠的地方,有一處不老的泉水,在那裡,他可以找到他人生的意義。按照先知的指引,dynamic出發了。翻越雪山,穿過叢林,渡過汪洋,終於來到了沙漠的最深處。按照先知的說法,泉水就在這個地方。然而除了無盡的黃沙之外,什麼都沒有。dynamic幾乎絕望了,他盲目地走著,突然來到了一圈奇異的巨石前,在巨石陣的**清晰地傳來泉水輕快的聲音。巨大的石頭擋住了去路,dynamic無法前進了。突然間,本來無色的石頭閃爍出絢麗奪目的光芒,與泉水聲交織成詩一般的樂章。又過了一剎那,色彩消失了。「這裡面一定有什麼秘密,我要把石頭染成剛才的顏色!」dynamic對自己說。他還清楚地記得每一塊石頭的顏色。智慧型女神雅典娜這是出現了,遞給他一把神奇的刷子,說「這把刷子每次可以把連續的不超過k塊石頭刷成一種新顏色,新刷的顏色會覆蓋原來的顏色。用最少的次數,恢復石陣的光彩,你就會找到不老的泉水。」dynamic意識到這並不是一件很容易的事,他出發得太匆忙,忘了帶上手提電腦。你能幫助他嗎?
第1行包含3個整數n,c,k。n是石頭的個數,c是顏色的種類,k是每次最多刷過 的石頭的個數。1<=n<=200,1<=c,k<=n。第2行包含n個整數,分別是n塊石頭最終的顏色,按照順時針的順序。顏 色是1到c之間的乙個整數,整數間用乙個空格隔開。開始的時候,所有的石頭都是無色的。
輸出乙個整數,為需要的最少次數。
5 2 31 2 1 2 1
3從樣例就看得出來,這個石頭的擺放是乙個環,直接連線不利於dp過程,那麼我們是否可以把他加長一段,使1-5等同於2-6等同於3-7,對吧,這樣既列舉了出發點和結束點,又達到了元素完整的目的,接下來怎麼處理呢?樣例說明:設5塊石頭的編號分別是1,2,3,4,5。可以先把5,1,2染成顏色1;再把2,3,4染成顏色2;最後把3染成顏色1。
區間dp的老套路還是沒有變的,只不過這次要多考慮一種條件,假如出發點和結束點已經是目標顏色並且這一段是能塗到色的(即當前塗色的範圍會小於等於最大塗色範圍),那麼就不需要塗結束點,取得就是出發點到結束點前乙個塗好色的最小次數。
1 #include2using
namespace
std;
3int n,m,t,a[401],s[401][401
]; 4
intmain()521
int ans=1231311
;
22for(int i=1;i+n-1
<=2*n;i++)
2327 printf("%d"
,ans);
28 }
不老的傳說 轉
傳說在很久很久以前,軟體界出過一位大師。他能直接用二進位制編寫複雜高效且無錯的程式 他寫過的機器碼比我們吃過的公尺還要多 他用眼睛看看閃爍的硬碟燈就知道程式當前的執行狀態 他用耳朵聽聽機器的噪音就可以準確地判斷出錯誤在哪個模組的哪一行 上。他寫的程式極為精簡,10行 就可以頂別人寫的100行 且效率...
C語言,不老的傳說
最受歡迎的歌一定是被聽得最多的,那麼最受歡迎的語言一定是被用得最多的。c語言現在用的多嗎?在業界,一般的答案是 如果一件事可以用x語言做,就一定不要用c語言做 這裡的x可以代指任何語言。天啊,這好像是再說 如果可以聽x的歌,就一定不要聽周杰倫的歌 這是在評價周杰倫還是曾軼可啊?哪種程式語言是最受歡迎...
SDUT 1309 不老的傳說問題 (區間DP)
題意 有乙個環形序列,n個數字表示一種顏色,要求將白板環刷成一模一樣的環,限制是每次最多只能刷連續的k個位置,問最少需要刷幾次?思路 跟2008長春那道painter string 差不多。只是這次是個環,難度也是沒有提公升的,只需要變成乙個2 n 1個數字的序列就可以了。考慮區間 l,r 如果 l...