藍橋杯 演算法訓練 Cowboys 遞推 動態規劃

2021-10-03 11:08:04 字數 2088 閱讀 8707

問題描述

乙個間不容髮的時刻:n個牛仔站立於乙個環中,並且每個牛仔都用左***指著他旁邊的人!每個牛仔指著他順時針或者逆時針方向上的相鄰的人。正如很多西部片那樣,在這一刻,繩命是入刺的不可惜……對峙的場景每秒都在變化。每秒鐘牛仔們都會分析局勢,當一對相鄰的牛仔發現他們正在互指的時候,就會轉過身。一秒內每對這樣的牛仔都會轉身。所有的轉身都同時在一瞬間發生。我們用字母來表示牛仔所指的方向。「a」表示順時針方向,「b」表示逆時針方向。如此,乙個僅含「a」「b」的字串便用來表示這個由牛仔構成的環。這是由第乙個指著順時針方向的牛仔做出的記錄。例如,牛仔環「abbbabbba」在一秒後會變成「babbbabba」;而牛仔環「babba」會變成「ababb」。 這幅圖說明了「babba」怎麼變成「ababb」 一秒過去了,現在用字串s來表示牛仔們的排列。你的任務是求出一秒前有多少種可能的排列。如果某個排列中乙個牛仔指向順時針,而在另乙個排列中他指向逆時針,那麼這兩個排列就是不同的。

輸入格式

輸入資料報括乙個字串s,它只含有「a」和「b」。

輸出格式

輸出你求出來的一秒前的可能排列數。

資料規模和約定

s的長度為3到100(包含3和100)

樣例輸入

babbbabba

樣例輸出

2樣例輸入

ababb

樣例輸出

2樣例輸入

ababab

樣例輸出

4樣例說明

測試樣例一中,可能的初始排列為:"abbbabbab"和 「abbbabbba」。

測試樣例二中,可能的初始排列為:「aabbb"和"babba」。

根據題意,是要求的一秒前的狀態的種數,那麼一秒前的狀態是將ab變為ba那麼要變回一秒前的狀態只可能是將現在的ba變為ab也可以選擇不變,當然如果將ba變為ab任何一種情況都可以,但是不變的話就要考慮一些情況了,例如bab必須把ba變成ab這一種情況,如果不變的花,那麼一秒前是這個bab這個狀態,現在就應該是bba這個狀態了。那麼有幾種情況直接看**。

由於這是個環,那麼就要考慮首尾在一起的情況,就是說每乙個a或者b都要考慮前面的是a還是b而第乙個還要考慮最後面的,環環相扣不好處理。這裡我首先將第乙個和第二個固定,如果附近有ba出現的話將他們移到第乙個和第二個的位置上(因為是個環,隨便移動不會有影響)然後分別考慮第一二個不變產生的結果數和第一二個變(如果能的話)產生的結果數

下面結合注釋看**。其中dp[i][0]表示當前不變的情況總和,dp[i][1]表示當前變化之後的情況總和,最後的情況應該是這兩種情況加起來,但還要根據後繼的情況進行選擇。

#include

#include

#include

using

namespace std;

void

rotate_right

(string& str)

void

rotate_left

(string& str)

long

long

getcombination

(const string& str)

else

}int cur = str.

length()

-1;//最後乙個的一般情況

dp[cur][0

]= dp[cur -1]

[0]+ dp[cur -1]

[1];

if(str[cur]

=='b'

&& str[cur -1]

=='a'

) dp[cur][0

]= dp[cur -2]

[1];

long

long res = dp[cur][0

];//返回的結果

//如果最後乙個是a開頭是b那麼結果應該等於最後乙個變的情況

if(str[0]

=='b'

&& str[cur]

=='a'

) res = dp[cur -1]

[1];

return res;

}int

main()

cout << res;

return0;

}

藍橋杯 演算法訓練 Lift and Throw

演算法訓練 lift and throw 時間限制 3.0s 記憶體限制 256.0mb 問題描述 給定一條標有整點 1,2,3,的射線.定義兩個點之間的距離為其下標之差的絕對值.laharl,etna,flonne一開始在這條射線上不同的三個點,他們希望其中某個人能夠到達下標最大的點.每個角色只能...

藍橋杯 演算法訓練 數列

題目 演算法訓練 數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 3 0,31,3 0 31,3 2,...

藍橋杯 演算法訓練 Glenbow Museum

資料規模和約定 按題目描述所示。問題描述 卡城著名的格林堡博物館是加拿大西部最大的博物館,展品涵蓋了藝術 文化史以及礦物學。如今乙個全新的展區正在被布置,它是專門為你這樣傑出的程式猿 媛 打造的。不幸的是,由於空間不足,博物館打算建造一棟新的建築來重新安置這個展區。新的建築的尺寸和容量將不同於原始的...