1085 數字遊戲

2022-05-03 15:30:27 字數 1616 閱讀 7601

2023年noip全國聯賽普及組

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

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

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

4                           -1

當要求最小值時,((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 2-1

樣例輸出 sample output

資料範圍及提示 data size & hint

en分類標籤 tags 點此展開 

劃分型dp

動態規劃

環型dp

noip全國聯賽普及組

大陸地區

2023年

劃分dp

把環變鏈(讀入4 3 -1 2變成4 3 -1 2 4 3 -1 2)

設dp[i][j][k]為把i~j分成k份,各部分內的數字相加,相加所得的k個結果對10取模後再相乘,最終得到的乙個數,這個數的最大或最小值。

dp[i][j][k]=max/min

i+k-2<=p<=j-1  func(i,j)=(sum(i,j)%10+10)%10

(注意有負數取餘,這樣寫:(x%10+10)%10 )

邊界:dp[i][j][1]=func(i,j)

答案:max/min(dp[i][i+n-1][m])  i=1 to n+1

ac**:

#include#include

#include

#include

using

namespace

std;

#define n 80

#define ll long longll f[n][n],g[n][n],a[n],s[n],n,m,emax,emin=0x7fffffff

;ll

get(ll x)

intmain()}}

emax=max(emax,f[n][m]);

emin=min(emin,g[n][m]);

}cout

return0;

}

1085 數字遊戲

2003年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分...

codevs 1085 數字遊戲

codevs 1085 數字遊戲 題目大意 在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k最大或者最小。dp i j k 表示i到j分成k個部分的最大值 dp i j k max 注意先將...

數字遊戲(codevs 1085)

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