題目
區間dp,將\(maxn[i][j][k]\)表示為i到j區間內分為k個區間所得到的最大值,\(minn\)表示最小值。
然後可以得到狀態轉移方程:
\[maxn[i][j][k]= max(maxn[i][j][k],maxn[i][l][k-1]*(l到j的\%10後的和))$$。
然後判斷一下邊界就能得到最終答案。
```c++
#include using namespace std;
int n, m, data[1001010];
int sum[111], ha[111][111];//每一段區間的和
int maxn[111][111][111], minn[111][111][111];
int ans1, ans2 = 2147483647;
int main()
n *= 2;
for (int i = 1; i <= n; i++)
sum[i] = sum[i - 1] + data[i];
memset(minn, 12, sizeof(minn));
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++)
ha[i][j] = (sum[j] - sum[i] + 100000) % 10, maxn[i][j][1] = minn[i][j][1] = ha[i][j];
for (int k = 2; k <= m; k++)
for (int i = 1; i <= n; i++)
for (int j = i + k - 1; j <= n; j++)
}for (int i = 1; i <= n / 2; i++)
ans1 = max(maxn[i][i + n / 2][m], ans1), ans2 = min(minn[i][i + n / 2][m], ans2);
printf("%d\n%d", ans2, ans1);
return 0;
}```\]
洛谷P1043 數字遊戲
丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...
洛谷 P1043 數字遊戲
跟石子合併差不多,區間dp 環形 用f i j s 表示從i到j分成s段所能獲得的最大答案,列舉斷點k,則f i j s min f i j s f i k s 1 代價 最小值反之.ps 區間和用字首和維護.1 include2 include3 include4 5using namespace...
洛谷P1043 數字遊戲
題意將n個數排位環狀,將其分為 k個部分,k個部分 對 10 取模 然後累乘起來,求其最大和最小的值 動態規劃 用 f i j k 表示將 i j這幾個數 分為 k個部分 能夠取到的最大值 可知狀態轉移方程 f i j k max f i j k f i l 1 k 1 c j c l 1 c 表示...