你有一條由n個紅色的,白色的,或藍色的珠子組成的項鍊(3<=n<=350),珠子是隨意安排的。 這裡是 n=29 的二個例子:
第一和第二個珠子在中已經被作記號。
brbrrrbbbrrrrrbrrbbrbbbbrrrrb
假如你要在一些點打破項鍊,展開成一條直線,然後從一端開始收集同顏色的珠子直到你遇到乙個不同的顏色珠子,在另一端做同樣的事(顏色可能與在這之前收集的不同)。 確定應該在**打破項鍊來收集到最大數目的珠子。
例如,在 a 中的項鍊中,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之間打斷項鍊可以收集到8個珠子。
白色珠子什麼意思?
在一些項鍊中還包括白色的珠子(如b) 所示。
當收集珠子的時候,乙個被遇到的白色珠子可以被當做紅色也可以被當做藍色。
表現含有白珠項鍊的字串將會包括三個符號 r , b 和 w 。
寫乙個程式來確定從一條被給出的項鍊可以收集到的珠子最大數目。
第 1 行: n, 珠子的數目
第 2 行: 一串長度為n的字串, 每個字元是 r , b 或 w。
輸出一行乙個整數,表示從給出的項鍊中可以收集到的珠子的最大數量。
29wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
題目翻譯來自nocow。
usaco training section 1.1
類似的題目還有「友好城市」、「能量項鍊」等,由於都涉及向前和向後搜尋,因此用到乙個方法,我把它叫做破環成鏈。顧名思義,就是把圓形的東西變成一條直線。看看資料規模,允許我們這麼做。不同的是,這裡要複製三次,因為有向後。然後再注意一下細節,考慮周到一點就行了。
#includeusing namespace std;
string s;
int f(int x)
for(int i=x+1;;i++)
return sum;
}int main()
ans=max(ans,f(i));
} ans=min(ans,n);//不能超過總長度
if(ans==-1) ans=n;//這樣子一定是一路continue
cout<
}
c aw 能量項鍊(破環成鏈)
對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是mars人吸收能量的一種器官 的作用,這兩顆珠子才能聚合成一顆珠子,同時釋放出可以被吸盤吸收的能量。如果前一顆能量珠的頭標記為m,尾標記為r,後一顆能量珠的頭標記為 r,尾標記為 n,則聚合後釋放的能量為...
壞掉的項鍊
描述 你有一條由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 ...
壞掉的項鍊
題目鏈結 題目描述 你有一條由 nnn 個紅色的,白色的,或藍色的珠子組成的項鍊,珠子是隨意安排的。這裡是 n 29n 29n 29 的兩個例子 第一和第二個珠子在中已經被作記號。假如你要在一些點打破項鍊,展開成一條直線,然後從一端開始收集同顏色的珠子直到你遇到乙個不同的顏色珠子,在另一端做同樣的事...