給出n個數圍成乙個環,將其劃分成k個部分,每個部分求和再對10取模,最後將每個部分的值相乘,求其最大值與最小值.
丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發 覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數(一共n個),你要按順序將其分為m個部分,各部分內的數字相加, 相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k最大或者最小。
輸入檔案第一行有兩個整數,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有個整數,其絕對值不大於104,按順序給出圈中的數字,首尾相接。
輸出檔案有兩行,各包含乙個非負整數。第一行是你程式得到的最小值,第二行是最大值。
4 243-12
各個測試點1s781
dp!^_^
簡單的劃分型dp.轉移方程:
dp[i][k]=max.
注意:1.取模.
2.初始化.
1 #include 2view codeusing
namespace
std;34
const
int maxn=50+5,maxk=10+5,inf=0x7fffffff;5
6int
n,k,ans1,ans2;
7int s[maxn<<1];8
intdp1[maxn][maxk],dp2[maxn][maxk];910
int num(int x)
11void
solve()22}
23 ans1=min(ans1,dp1[n][k]);
24 ans2=max(ans2,dp2[n][k]);25}
26 printf("
%d\n%d\n
",ans1,ans2);27}
28void
init()
34for(int i=n+1;i<=2*n;i++) s[i]=s[n]+s[i-n];35}
36int
main()
Vijos 1218 數字遊戲
演算法 環形dp 劃分型dp 環形dp的思路很簡單,將1 n中每乙個節點當成起點進行劃分型dp即可,關於劃分型dp前面 有介紹 查詢tag把 sxbk!sxbk。此題那麼水卡了我3個小時。到頭來發現是初始化。但我也學到了不少東西 define oo unsigned long long 0 1 替代...
1218 取石子遊戲
題目 有兩堆石子,兩個人輪流去取。每次取的時候,只能從較多的那堆石子裡取,並且取的數目必須是較少的那堆石子數目的整數倍,最後誰能夠把一堆石子取空誰就算贏。比如初始的時候兩堆石子的數目是25和7。25 7 11 7 4 7 4 3 1 3 1 0選手1取 選手2取 選手1取 選手2取 選手1取 最後選...
1218 取石子遊戲
1218 取石子遊戲 時間限制 1000 ms 記憶體限制 65536 kb 提交數 4462 通過數 2049 題目描述 有兩堆石子,兩個人輪流去取。每次取的時候,只能從較多的那堆石子裡取,並且取的數目必須是較少的那堆石子數目的整數倍,最後誰能夠把一堆石子取空誰就算贏。比如初始的時候兩堆石子的數目...