題解 數字遊戲

2021-08-20 19:31:20 字數 1376 閱讀 8931

「the game is on.」——sherlock·holmes

【問題描述】

遊戲是這樣的:在你面前有一圈整數(一共n個),你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k最大或者最小。例如,對於下面這圈數字(n=4,m=2):

◆最小值:((2-1) mod 10)×((3+4) mod 10)=1×7=7。

◆最大值:(-1 mod 10)×((3+4+2) mod 10) =9×9=81。

特別值得注意的是,無論是負數還是正數,對10取模的結果均為非負值。請你編寫程式幫他贏得這個遊戲。

【輸入格式】

第一行有兩個整數,n(1≤n≤50)和m(1≤m≤9)。

接下來的n行,每行乙個整數,其絕對值不大於10000,按順序給出圈中的數字,首尾相接。

【輸出格式】

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

【輸入樣例】

4 22-13

4【輸出樣例】781

【資料範圍】

1≤n≤50 1≤m≤9

#include#include#include#include#define maxn 1000000000

using namespace std;

int n,m,ansmax=-maxn,ansmin=maxn;

int num[55],prefix[55]=;

int f_min[55][15]=,f_max[55][15]=;

void prefix_sum()

}//用字首和的思想,算出分一組時的和

void roll()

num[n]=num[0];

} int main()

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

//初始化分一組的情況

//f[n][m]:n個元素分成m組,和的最小/大值(n>=m)

for(int m=2;m<=m;m++)

}}

ansmax=max(ansmax,f_max[n][m]);

ansmin=min(ansmin,f_min[n][m]);

//多組ans,求最值

roll();

//環狀陣列,每算出一次答案都要向前滾動一位 }

printf("%d\n%d",ansmin,ansmax);

return 0;

}

HDU X mod f x 題解(數字dp)

在1 l r 1e9內,找出有多少個數mod 自己每一位數和 為0 顯然是數字dp,但是比較巧妙的是要,列舉mod,還有這個卡空間,不能直接return dp pos mod digsum digmod limit 就是不要你乘以兩倍。可以令 dp pos mod digsum digmod 都為l...

題解 數字梯形問題

這樣一道傻題我調了這麼久 三個任務建圖是這樣的,由於太簡單就不xjb解釋了,乙個點拆位入點和出點 graph lr s w 1,c 1 入點1 入點1 w 1,c 點權1 出點1 入點2 w 1,c 點權2 出點2 入點3 w 1,c 點權2 出點3 出點1 w 1,c 0 入點2 出點1 w 1,...

CSP2019普及組題解 數字遊戲(C )

小 k 同學向小 p 同學傳送了乙個長度為 8 的01 字串來玩數字遊戲,小 p 同學想 要知道字串中究竟有多少個 1。注意 01 字串為每乙個字元是 0 或者 1 的字串,如 101 不含雙引號 為一 個長度為 3 的 01 字串。輸入檔案只有一行,乙個長度為 8 的 01 字串 s。輸出檔案只有...