「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。輸出檔案只有...