劃分型DP 數字遊戲

2021-07-17 00:01:40 字數 1977 閱讀 7773

在cv上看到乙個題解思路清晰,特地搬來這裡存一下。

題目描述 description

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

例如,對於下面這圈數字(n=4,m=2):

24                           -1

3當要求最小值時,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值時,為((2+4+3) mod 10)×(-1 mod 10)=9×9=81。特別值得注意的是,無論是負數還是正數,對10取模的結果均為非負值。

丁丁請你編寫程式幫他贏得這個遊戲。

輸入描述 input description

輸入檔案第一行有兩個整數,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有個整數,其絕對值不大於104

,按順序給出圈中的數字,首尾相接。

輸出描述 output description

輸出檔案有兩行,各包含乙個非負整數。第一行是你程式得到的最小值,第二行是最大值。

樣例輸入 sample input

4 243-1

2 樣例輸出 sample output 7

81

資料範圍及提示 data size & hint en

由於是環,需要斷環成鏈。採用序列倍增的方法,即原序列是1 2 3,新序列是1 2 3 1 2 3,列舉dp起點。

o(n^2)預處理,求出第i到j之間數字和對10求餘的結果。

注意:正確的求餘方法是((n%10)+10)%10!

列舉起點s,前i個數分成j組,其中最後一組含有第k+1到i的數字

狀態轉移方程:

d[i][j]=min(d[i][j],d[k][j-1]*summod10[s+k+1][s+i]);

p[i][j]=max(p[i][j],p[k][j-1]*summod10[s+k+1][s+i]);

(0<=s

注意:當m=1是,只有一種劃分方案,無需狀態轉移,否則會得出錯誤的答案(這裡卡了好久)!

最後注意一下初始化條件,d=inf,p=0,d[0][0]=p[0][0]=1.

#include#include#include#define maxn 53

#define maxm 12

#define inf 1000000

using namespace std;

int n,m;

int n[maxn*2];

int summod10[maxn*2][maxn*2];

int d[maxn][maxm];

int p[maxn][maxm];

int min=int_max;

int max=int_min;

int main()

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

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

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

if(m==1)

else

for(int s=0;s

劃分型dp需要注意的地方

若dp[i][j]表示為前i個分成j份時:

1.要考慮dp[0][0]=1;

2.k=1時無需狀態轉移,表示只有一種劃分方案,需要if語句提前處理邊界;

3.預處理時dp=inf.

4.模板(答案為dp[n][m]時)

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

for(int j=1;j<=min(i,m);j++)

for(int k=j-1;k<=i-1;k++)

d[i][j]=min(d[i][j],d[k][j-1](?)f(x));

劃分型DP 乘積最大

題目 題目描述 description 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為...

數字DP 數字遊戲

科協裡最近很流行數字遊戲。某人命名了一種不降數,這種數字必須滿足從左到右個位數字呈現小於等於的關係,如123,446.現在大家決定玩乙個遊戲,指定乙個整數閉區間 a,b 問這個區間內有多少個不降數。輸入多組測試資料。每組只包含兩個數字a和b 1 a,b 2 31 每行給出乙個測試資料的答案,即 a,...

數字DP 數字遊戲

科協裡最近很流行數字遊戲。某人命名了一種不降數,這種數字必須滿足從左到右各位數字呈非下降關係,如 123,446。現在大家決定玩乙個遊戲,指定乙個整數閉區間 a,b 問這個區間內有多少個不降數。輸入格式 輸入包含多組測試資料。每組資料佔一行,包含兩個整數 a 和 b。輸出格式 每行給出一組測試資料的...