題目鏈結
題目描述
你有一條由 nnn 個紅色的,白色的,或藍色的珠子組成的項鍊,珠子是隨意安排的。 這裡是 n=29n=29n=29 的兩個例子:
第一和第二個珠子在中已經被作記號。
假如你要在一些點打破項鍊,展開成一條直線,然後從一端開始收集同顏色的珠子直到你遇到乙個不同的顏色珠子,在另一端做同樣的事(顏色可能與在這之前收集的不同)。 確定應該在**打破項鍊來收集到最大數目的珠子。
例如,在 a 中的項鍊中,在珠子 999 和珠子 101010 或珠子 242424 和珠子 252525 之間打斷項鍊可以收集到 888 個珠子。
白色珠子什麼意思?
在一些項鍊中還包括白色的珠子(如b) 所示。
當收集珠子的時候,乙個被遇到的白色珠子可以被當做紅色也可以被當做藍色。
表現含有白珠項鍊的字串將會包括三個符號 r,b,w 。
寫乙個程式來確定從一條被給出的項鍊可以收集到的珠子最大數目。
輸入格式
第一行乙個正整數 nnn ,表示珠子數目。 第二行一串長度為 nnn 的字串, 每個字元是 r , b 或 w。
輸出格式
輸出一行乙個整數,表示從給出的項鍊中可以收集到的珠子的最大數量。
輸入輸出樣例
輸入 #1
29wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
輸出 #1
說明/提示
【資料範圍】
對於 100%100%100% 的資料,3≤n≤3503\le n \le 3503≤n≤350
題目翻譯來自nocow。
usaco training section 1.1
想不到怎麼用dp解,還好資料範圍很小,列舉每乙個斷點即可。
int l[
1000
], r[
1000];
intmain()
ff =0;
if(!ff && a[i +1]
=='r'
) ff =1;
elseif(
!ff && a[i +1]
=='b'
) ff =2;
for(
int j = i +
2; j <= i + n -
1; j++)}
int ans =0;
for(
int i = n +
1; i <=
2* n; i++
) ans =
max(l[i]
+ r[i]
, ans)
; cout <<
min(ans, n)
<< endl;
return0;
}
壞掉的項鍊
描述 你有一條由n個紅色的,白色的,或藍色的珠子組成的項鍊 3 n 350 珠子是隨意安排的。這裡是 n 29 的二個例子 1 2 1 2 r b b r b r r b r b b b r r b r r r w r b r w w b b r r b b b b b b r b r r b r ...
壞掉的項鍊 破環成鏈
你有一條由n個紅色的,白色的,或藍色的珠子組成的項鍊 3 n 350 珠子是隨意安排的。這裡是 n 29 的二個例子 第一和第二個珠子在中已經被作記號。brbrrrbbbrrrrrbrrbbrbbbbrrrrb 假如你要在一些點打破項鍊,展開成一條直線,然後從一端開始收集同顏色的珠子直到你遇到乙個不...
EOJ 3188 壞掉的彩燈
bob 有一串節日彩燈,彩燈共有 4 種顏色 r,b,y,g 表示 可惜有一些燈泡已經壞掉了 表示 bob 並不記得彩燈的序列,只記得這串彩燈的任意 4 個連續的燈泡顏色都不相同。bob 需要統計每種顏色壞掉的彩燈有多少個。0123下標對應rbyg四種顏色。其中tot和ans陣列儲存每種顏色的燈應有...