poj 3276 反轉開關問題 一 DP 模擬

2021-06-20 18:31:46 字數 729 閱讀 4862

sample input

7bb

fbfb

b

sample output

3 3

窮舉肯定是要超時的 2^n個狀態...但是先思考一些規律吧:

1、轉動奇數次,必然與初始方向相反;

2、轉動偶數次,必然與初始方向相同;

列舉k:1-n,得到o(n^3)的**:(這個**會超時,只是模擬而已)

//tle o(n^3)

#include #include #include #include using namespace std;

#define maxn 5005

int s[maxn];

int n;

int test(int k)

for(i=n-k+1;i=0)

sum-=f[i-k+1];

}//if(!s[i])

// return -1;

return ans;

}int main()

{ int i,len,kmin,m,mmin,k;

char cow[maxn];

while(scanf("%d",&n)!=eof)

{memset(s,0,sizeof(s));

mmin = maxn;

m=-1;

for(i=0;i=0&&m

poj3276 反轉 開關問題

題目大意 給你乙個長度為n的字串,包含字母f和b 你可以把區間k 乙個常數 內的所有f變成b,b變成f。為了把這個字串都變成f,求變化的最小次數和其對應的k的值 分析 挑戰程式設計競賽 反轉法的例題,此做法非書上做法 列舉k,對於每個k,只要序列最左端的b變成f,然後依次變化,得到答案 列舉起點然後...

poj3276(開關問題)

可算明白了.bbfbfbb 我們到達第三個f,我們需反轉。標記一下在3出反轉了 vis 3 1 對以後的影響是 1.用sum記載影響程度即sum 1 我們到達第四個,雖然是b,但是收到前面影響 sum 1 也就是變成f了。我們需要反轉。標記vis 4 1.sum再 1.即sum 2 也就是第五個會受...

POJ 3276 開關問題

題目鏈結 題目大意 有一些牛,頭要麼朝前要麼朝後,現在要求確定乙個連續反轉牛頭的區間k,使得所有牛都朝前,且反轉次數m盡可能小。解題思路 首先不要看錯題意了,不是求最小k,不要二分。而且反轉區間長度一定是k,小於k是不能反轉的。很明顯得列舉k 1.n 並且有以下反轉思路 從第一頭牛開始,如果朝前,不...