SSL 1028 數字遊戲

2022-09-18 01:18:12 字數 1320 閱讀 4916

description

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

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

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

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

input

輸入第一行有兩個整數,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有個整數,其絕對值不大於104,按順序給出圈中的數字,首尾相接。

output

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

sample input

4 2

4 3

-1 2

sample output

7 81

這道題是典型的環形dp,我們設f[i][j]為前i個數分成j份得到的最大值,g[i][j]表示前i個數分成j份獲得的最小值。於是狀態轉移方程很容易推出來:

f[i][j]=max(f[i][j],f[k][j-1]*(((sum[i]-sum[k])%10+10)%10));

g[i][j]=min(g[i][j],g[k][j-1]*(((sum[i]-sum[k])%10+10)%10));

我們列舉乙個k端點在1~i-1之間,表示這k個數分成j-1份之後剩下的k+1到i分成乙份,所獲得的價值用字首和處理即可。

(注意要%10)

**如下:

#include

#include

#include

using namespace std;

const int maxn=205;

int min,max,n,sum[maxn],num[maxn],f[maxn][15],g[maxn][15],m;

void dp(int a)

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

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

}int main()

for(int i=0;idp(num+i);

printf("%d\n%d",min,max);

return 0;

}

SSL 1028 數字遊戲

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

SSL 1653 數字遊戲

description 小w發明了乙個遊戲,他在黑板上寫出了一行數字a1,a2,a3,an,然後給你m個回合的機會,每會回你可以從中選擇乙個數字擦去它,接著剩下來的每個數字ai都要遞減乙個值bi。如此重複m個回合,所有你擦去的數字之和就是你所得的分數。小w和他的好朋友小y玩了這個遊戲,可是他發現,對...

SSL 數字證書

secure 可靠的.安全的 socket 座 layer 層 ssl 協議 ssl 是乙個安全協議,它提供使用 tcp ip 的通訊應用程式間的隱私與完整性。網際網路的 超文字傳輸協議 http 使用 ssl 來實現安全的通訊。由於ssl技術已建立到所有主要的瀏覽器和web伺服器程式中,因此,伺服...