P1043 數字遊戲

2022-05-16 07:59:49 字數 1181 閱讀 7301

研究環狀dp

可以開雙倍大小的陣列用以表示環

表示為  f [ i ] [ j ] [ l ]

從i  到  l 的區間裡,劃分 l 段

進行遞推前,需要初始化  f [ i ] [ j ] [ 1 ]

然後有乙個小細節就是sum

進行字首和優化 將 o(n)的東西優化成 o(1)

可以加快節奏

讀取最值時記得掃一遍環  :   f [ i ] [ i+n-1 ]    i : 1 -> n

狀態轉移方程為   f [ i ] [ j ] [ l ] = min或max( f [ i ] [ j ] [ l ] , f [ i ] [ k ] [ l-1 ] * f [ k-1 ] [ j ] [ 1 ] )    (i <= k < j )

1 #include2 #include3 #include4

#define py 1e8

5#define ll long long

6using

namespace

std;78

inline ll judging(ll a)912

13 ll sum[10000

];14 ll f[105][105][100

];15 ll f0[105][105][100

];16

17int

main()18

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

3033

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

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

3640

for(int l=2;l<=m;l++)

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

42for(int j=i+l-1;j<=2 * n;j++)

4349

}50 ll maxn=0,minn=0x7f;51

52for(int i=1;i<=n;i++)

5357 cout<'\n'

<58 }

嗯……有乙個很討厭的的地方

就是不要以為  2  *  n  最大是50,就開  f[100] [100] [10]

我就是這樣,少開了一位!就一位!)

喜提re

-end-

P1043 數字遊戲

丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...

P1043 數字遊戲

給乙個由 n nn 個數組成的環,講環拆成 m mm 份,每份求和最後相乘,求最大 最小值。一道區間 dpdp dp題,首先因為是環,常規做法就是拆環,用兩倍數組裝,又要對每份求和,那就需要用到字首和。陣列 dp i j dp i j dp i j 表示將 j jj 個數分成 i ii 份的最大 最...

P1043 數字遊戲

丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...