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取模後再相乘,最終得到...