區間DP 中山紀念中學暑期遊Day2 取數遊戲

2021-09-25 20:29:28 字數 1404 閱讀 9658

詭異的區間dp...

(突然發現自己之前的部落格格式好繁瑣...改進一下...)

alice想讓bob陪他去看《唐山大**》,但由於bob是個很感性的人,怕流淚不想去,但又不好意思以這個作為拒絕的理由,便提出玩乙個遊戲。

n個正整數圍成一圈,規則如下:

•兩個玩家輪流取數;

•最開始先手的玩家可以取任意乙個數x;

•從第二步開始當前玩家只能取x(上一玩家剛剛取的數)左右兩邊相鄰的數;

•直到取完所有的數,遊戲結束;

•取得較多奇數的玩家獲勝。

bob為了顯示大度,讓alice先取,但他忘了自己和alice都是絕頂聰明之人,現在alice請你幫他計算第一步有多少種取法使得最終獲得勝利。

input

第一行包含乙個整數n(1<=n<=100),表示數的個數。第二行包含n個正整數,每個數都在1到1000之間,任意兩個數互不相同。

output

輸出alice第一步有多少種取法。

sample input

輸入1:

33 1 5

輸入2:

41 2 3 4

輸入3:

84 10 5 2 9 8 1 7

sample output

輸出1:

3輸出2:

2輸出3:

5

1)處理「環」:複製一遍陣列接在原陣列後面

2)n^3的區間dp

(特別鳴謝)參考部落格:

3)一些自己總結的要點:(大多都標在**注釋裡了)

還有陣列別開小了,之前maxn=100居然ce,才50分,多不划算是不是...

update——2019.11.2

我看了一下,感覺上面應該打錯了,覺得轉移應該是:f[ l,r ]=s[ l,r ]-min( f[ l+1,r ] , f[ l,r-1 ] )

#include#include#include#include#includeusing namespace std;

const int maxn=500;

int a[maxn+5],s[maxn+5][maxn+5];

int dp[maxn+5][maxn+5];

int n,ans;

int main()

for(int i=1;i<=2*n;i++)

for(int j=i;j<=2*n;j++)

for(int k=1;k<=n;k++)

printf("%d\n",ans);

return 0;

}

2019 遊記 中山紀念中學暑期遊Day3

今天沒有考試,專門講課,聽不懂的同學還可以回機房瞎搞 感覺安排的還可以,至少時間還是挺充裕的,只是講解的內容太多了,消化不完qaq.早上依舊沒有早起.三天過去了,我連有沒有鈴聲都不知道 去食堂吃了乙個椰蓉麵包 學校居然取名 奶皇麵包 是的,我字沒有打錯,看起來就是這樣高大上,然鵝吃起來像批發的 乙個...

2019 遊記 中山紀念中學暑期遊Day6

今天的安排是 聽課!資料結構 專題,花了一早上和一下午,晚上在搞乙個兄弟自己出的題目 賊坑 於是時間又沒了qaq.真心覺得時間怎麼都不夠用啊咧.早上還是沒有早起成功,於是匆匆趕往食堂,居然有公尺漢堡 公尺飯夾雞肉 吃得還算滿意qwq 來到報告廳,座位不出所料的被佔滿了,可是還是get到乙個c位 人品...

2019 遊記 中山紀念中學暑期遊Day9

昨天去珠海玩了下,感覺還不錯誒,就是好熱好曬.很想細寫但是沒時間,故事大多都在 上了 其實現在正在打字的我是10號的我.來填坑了23333.詳情記不到了,直接說考試 這次考試真的考得好炸,都是難以暴力應付的題qwq.第一題 自己想到了是dp,而且和正解的狀態定義都一樣!但是不會打,這就很現實了.暴力...