<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      題解:AT_agc050_b [AGC050B] Three Coins

      傳送門

      注:如無特殊說明,本篇題解中所有的序列,均用紅色標示已經放置硬幣的位置。若本次操作為拿走硬幣,用藍色標示本次操作拿走的硬幣的位置,用黑色標示從未放過硬幣或放置過硬幣且在本次操作之前的操作中被拿走的位置。

      根據題意和數據范圍,不難想到本題的做法是區間 DP。然而難點在于刻畫放置和拿走硬幣這兩個操作。

      舉個例子,考慮序列 \([\textcolor{red}5,\textcolor{red}4,\textcolor{red}{-2},-3,-1,6]\),其中前三個位置放置了硬幣。此時的分數和是 \(7\),還能不能更大呢?

      考慮先將后三個位置也放上硬幣,然后再將第 \(3\sim5\) 個位置的硬幣拿走,序列狀態變化為:\([\textcolor{red}{5},\textcolor{red}{4},\textcolor{red}{-2},\textcolor{red}{-3},\textcolor{red}{-1},\textcolor{red}{6}]\to [\textcolor{red}{5},\textcolor{red}{4},\textcolor{blue}{-2},\textcolor{blue}{-3},\textcolor{blue}{-1},\textcolor{red}{6}]\to[\textcolor{red}5,\textcolor{red}4,-2,-3,-1,\textcolor{red}6]\),兩步操作后的分數和分別是 \(9\)\(15\)。

      我們發現如上操作的實質是把第 \(3\) 個位置的硬幣移動到第 \(6\) 個位置。類似地可以推斷出,第 \(i\) 個位置的硬幣只能由第 \(i±3k\) 個位置的硬幣移動而來。

      如果只進行這一步轉化,還不足以分析出區間合并的方法。因此,我們再考慮一個序列 \([9,-5,-3,\textcolor{red}{-2},\textcolor{red}7,\textcolor{red}{-1},-6,-4,8]\),其中第 \(4\sim 6\) 個位置放置了硬幣。此時的分數之和是 \(4\),還能不能更大呢?

      考慮如下的序列狀態變化:\( [9,-5,-3,\textcolor{red}{-2},\textcolor{red}7,\textcolor{red}{-1},-6,-4,8]\to[\textcolor{red}9,\textcolor{red}{-5},\textcolor{red}{-3},\textcolor{red}{-2},\textcolor{red}7,\textcolor{red}{-1},-6,-4,8]\to[\textcolor{red}9,\textcolor{blue}{-5},\textcolor{blue}{-3},\textcolor{blue}{-2},\textcolor{red}7,\textcolor{red}{-1},-6,-4,8]\to[\textcolor{red}9,-5,-3,-2,\textcolor{red}7,\textcolor{red}{-1},\textcolor{red}{-6},\textcolor{red}{-4},\textcolor{red}8]\to[\textcolor{red}9,-5,-3,-2,\textcolor{red}7,\textcolor{blue}{-1},\textcolor{blue}{-6},\textcolor{blue}{-4},\textcolor{red}8]\to[\textcolor{red}9,-5,-3,-2,\textcolor{red}7,-1,-6,-4,\textcolor{red}8] \)。每一步操作后的分數和分別是 \(5,15,13,24\)。

      觀察到我們可以通過放置和拿走硬幣操作的組合,把連續放置的 \(3\) 個硬幣拆開,使左邊的位置為 \(i\) 的硬幣移動到 \(i-3\),中間的位置為 \(j\) 的硬幣不動,右邊的位置為 \(k\) 的硬幣移動到 \(k+3\)。這樣我們就推導出了區間合并的方法。

      \(f_{l,r}\) 表示區間 \([l,r]\) 能得到的最大分數和。對于一個長度為 \(3\) 的倍數的區間 \([l,r]\),枚舉斷點 \(i\),如果區間 \([l+1,i-1]\)\([i+1,r-1]\) 的長度都是 \(3\) 的倍數,也即位置為 \(l\)\(r\) 的硬幣都能夠分別移動到 \(i-1\)\(i+1\) 的位置,那么就有 \(f_{l,r}=\max(f_{l,r},f_{l+1,i-1}+f_{i+1,r-1}+a_l+a_i+a_r)\)。對于所有區間,都套路地進行 \(f_{l,r}=\max(f_{l,r},f_{l,i}+f_{i+1,r})\) 的轉移。

      最終的答案就是 \(f_{1,n}\),時間復雜度 \(O(n^3)\)

      #include <bits/stdc++.h>
      using namespace std;
      const int N = 510;
      int n, a[N], f[N][N];
      int main () {
      	cin >> n;
      	for (int i = 1; i <= n; ++i)
      		cin >> a[i];
      	for (int len = 1; len <= n; ++len)
      		for (int l = 1, r = l + len - 1; r <= n; ++l, ++r) {
      			if (len % 3 == 0)
      				for (int i = l + 1; i < r; ++i) {
      					if ((i - l + 1) % 3 != 2 || (r - i + 1) % 3 != 2)
      						continue;
      					f[l][r] = max(f[l][r], f[l + 1][i - 1] + f[i + 1][r - 1] + a[l] + a[i] + a[r]);
      				}
      			for (int i = l; i < r; ++i)
      				f[l][r] = max(f[l][r], f[l][i] + f[i + 1][r]);
      		}
      	cout << f[1][n];
      	return 0;
      }
      
      posted @ 2025-10-14 00:00  JohnYam  閱讀(11)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 永久无码天堂网小说区| 四虎永久免费高清视频| 国产丰满乱子伦无码专区| 久久妇女高潮喷水多| 国产精品无码无需播放器| 色综合久久一区二区三区| 色综合五月伊人六月丁香| 国产av一区二区不卡| 鹤庆县| 色一情一乱一区二区三区码 | 亚洲一区二区约美女探花| 亚洲欧美另类久久久精品播放的| 女人香蕉久久毛毛片精品| 精品无码国产自产拍在线观看| 国产乱妇乱子视频在播放| 国内不卡不区二区三区| 精品久久久久久无码中文野结衣| 韩国精品一区二区三区在线观看| 在线看国产精品三级在线| 尤物yw193无码点击进入| 亚洲av与日韩av在线| 五月丁香综合缴情六月小说| 男女做aj视频免费的网站| 免费久久人人爽人人爽AV| 亚洲免费人成在线视频观看| 国产999久久高清免费观看| 中文字幕日韩国产精品| 久久99精品中文字幕在| XXXXXHD亚洲日本HD| 毛多水多高潮高清视频| 成人精品天堂一区二区三区| 久久精品国产中文字幕| 国产亚洲精品97在线视频一| 国产精品亚洲二区在线播放| 国产91精品调教在线播放| 免费国产精品黄色一区二区 | 镇远县| 日韩精品一区二区三区中文无码| 成人自拍小视频在线观看| 亚洲综合小说另类图片五月天 | 美女爽到高潮嗷嗷嗷叫免费网站|