題目描述
維多利加:這裡的確有許多書,但是……
這裡沒有你。
【問題描述】
布洛瓦侯爵想利用維多利加來占卜二戰的局勢。侯爵只給了她一盤西洋棋和許多書,便將她關在了王宮的地牢。
西洋棋盤可以看成乙個 n*m 的網格。西洋棋可以擺放在任何乙個格仔裡,而不是網格線的交叉點上。
維多利加將乙個棋子放在了左上角的格仔上。她試著移動這個棋子,棋子只會向右或者向下移動。
每個格仔有乙個權值,維多利加想知道,從左上角到右下角的所有路徑中:
1.經過的格仔的權值和最大是多少?
2.權值和最大的路徑一共有多少條?
輸入
第一行兩個整數 n,m。
接下來 n 行,每行 m 個整數,表示每個格仔的權值。
輸出
輸出兩行,第一行表示最大權值和,第二行表示權值和最大的路徑數除以 1e9+7 的餘數。
樣例輸入
3 31 1 1
1 2 1
1 1 1
樣例輸出
6
4資料範圍限制
ai,j 表示第 i 行第 j 列格仔的權值。
30%的資料保證,n≤5,m≤5。
60%的資料保證,n≤100,m≤100。
另有 20%的資料保證,對於任意的 i 和 j,ai,j = 1。
100%的資料保證,n≤2000,m≤2000,|ai,j|≤10^9。
const
maxn=2000;
var a,f:array [0..maxn] of int64;
i,j,n,m,s,hjy:longint;
begin
assign(input,'chess.in'); reset(input);
assign(output,'chess.out'); rewrite(output);
fillchar(a,sizeof(a),128);
readln(n,m);
f[1]:=1;
hjy:=1000000007;
for i:=1 to n do
begin
for j:=1 to m do
begin
read(s);
if (i=1) and (j=1) then a[j]:=s;
if (i<>1) or (j<>1) then
begin
if a[j]=a[j-1] then f[j]:=(f[j]+f[j-1]);
if a[j]>=a[j-1] then a[j]:=s+a[j]
else begin a[j]:=s+a[j-1]; f[j]:=f[j-1]; end;
iff[j]>hjy then f[j]:=f[j] mod hjy;
end;
end;
readln;
end;
writeln(a[m]);
writeln(f[m]);
close(input); close(output);
end.
馬的移動問題 西洋棋BFS
輸入包含多組測試資料。每組輸入由兩個方格組成,每個方格包含乙個小寫字母 a h 表示棋盤的列號,和乙個整數 1 8 表示棋盤的行號。對於每組輸入,輸出一行 to get from xx to yy takes n knight moves.e2 e4 a1 b2 b2 c3 a1 h8 a1 h7 ...
POJ 1657求西洋棋的格數
題意 王 後 車 象的走子規則如下 寫乙個程式,給定起始位置和目標位置,計算王 後 車 象從起始位置走到目標位置所需的最少步數。思路 王 橫 直 斜都可以走,但每步限走一格。其步數為 max x,y 後 橫 直 斜都可以走,每步格數不受限制。其步數為 1 可以直走或斜走到達 x y x 0 y 0 ...
poj 1657 西洋棋棋盤上的距離
題意 給定西洋棋上的乙個起點和乙個終點,問王 後 車 象分別最少走多少步能從起點到終點。思路 細心就可以。include include define max a,b a b a b int a,b,c,d,t int test1 int test2 int main printf d max ab...