解码
【題目描述】?
從前有一只紅色的云在天上非常愉快地飄,但是……
紅云是一只十分好奇的生物(友情提示:生物考試的時候千萬不能說云是生物,千萬不能!),俗話說好奇心害死云,紅云因為太好奇了所以被一個邪惡的地球人的陷阱困住了。
陷阱有一個神奇的出口,但需要輸入正確的密碼。紅云不能理解地球人的思維所以并不知道怎么辦。幸運的是它發(fā)現(xiàn)陷阱的旁邊有一只DTZ,于是它用iPhone6威脅DTZ幫它解碼。
DTZ通過神奇的途徑得知了密碼是這道題的答案:對于一個包含n個數(shù)的數(shù)列,每一位可以從1~m中選擇一個數(shù)填上去,使得這個數(shù)列遞增。該數(shù)列每一位的數(shù)字不能相同,求總共有幾種不同的選擇方法。將答案模23333便是密碼。
然而DTZ非常尷尬地發(fā)現(xiàn)他解決不了這個問題因為數(shù)實在太大了,所以就把這個鍋強行甩給了你。作為一個善良的地球人,請盡快解決這個問題,這樣紅云就會十分感激并用iPhone6威脅評測系統(tǒng)給你的考試分數(shù)加上100分。
【輸入描述】?
輸入包含兩個正整數(shù)n,m
【輸出描述】?
輸出包含一個正整數(shù)表示密碼
【樣例輸入】?
3 3
【樣例輸出】?
1
【樣例解釋】?
假設這個數(shù)列的3個數(shù)分別為a1,a2,a3(1<=a1<a2<a3<=3< span="">),求有幾種不同的填法。 </a2<a3<=3<>
那么只有一種答案:1,2,3
所以密碼為1 mod 23333=1
【數(shù)據(jù)范圍】
對于10%的數(shù)據(jù),n=m
對于100%的數(shù)據(jù),1<=n<=10000, n<=m<=10000
程序:
var
f:array[0..1,-1..10001]of longint;
i,j,n,m:longint;
function min(x,y:longint):longint;
begin
? ? if x>y then exit(y) else exit(x);
end;
begin
? ? read(n,m);
? ? f[0,0]:=1;
? ? for i:=1 to m do
? ? for j:=0 to min(n,i) do
? ? f[i mod 2,j]:=(f[(i+1) mod 2,j]+f[(i+1) mod 2,j-1]) mod 23333;
? ? write(f[m mod 2,n]);
end.
轉載于:https://www.cnblogs.com/YYC-0304/p/9500113.html
總結