時間限制:
1000 ms 空間限制:
262144 kb 具體限制
goto problemset
題目描述
最近小h家鬧鼠災,弄得小h十分惱火。為了解決老鼠的問題,小h根據老鼠的特點想出了乙個方法。假設小h 的家是乙個n*n的格仔,每個格仔都有一定的食物,數量在0到100之間,經過觀察,老鼠的窩在(1,1)的位置,老鼠吃東西有個特點,到哪個地方,就把這個地方的食物都吃掉,而且每次都比上一次吃的食物要多,因此它們總會有個停止的地方,而且,這些老鼠一次最多可以跳k格,不過只能按x軸或y軸方向來跳。現在,小h給出食物的分布,他想知道乙隻老鼠最多可以吃到多少食物。
輸入 第一行,n,(1<=n<=100),k,(0<=k<=n),表示n*n的格仔,老鼠一次最多跳k格。
接下來的n行,每行n個數,表示這個方格上的食物數量。
輸出乙個數,表示乙隻老鼠最多可以吃到的食物。
樣例輸入
3 11 2 5
10 11 6
12 12 7
樣例輸出
37
資料範圍限制
提示【樣例解釋】
(1,1)->(1,2)->(1,3)->(2,3)->(2,2)->(3,2)
1+2+5+6+11+12=37
**如下: 記憶化搜尋
const
wx:array[1..4]of longint=(1,0,-1,0);
wy:array[1..4]of longint=(0,1,0,-1);
var a,f:array[-100..1001,-100..1001]of longint;
n,k,max:longint;
procedure
dfs(x,y:longint);
var i,j:longint;
begin
for i:=1to4
dofor j:=1
to k do
if (a[x,y]and(x+wx[i]*j>0)and(x+wx[i]*j<=n)and(y+wy[i]*j>0)and(y+wy[i]*j<=n) then
if f[x+wx[i]*j,y+wy[i]*j]then
begin
f[x+wx[i]*j,y+wy[i]*j]:=f[x,y]+a[x+wx[i]*j,y+wy[i]*j];
dfs(x+wx[i]*j,y+wy[i]*j);
end;
end;
procedure
init;
var i,j:longint;
begin
readln(n,k);
for i:=1
to n do
for j:=1
to n do
read(a[i,j]);
f[1,1]:=a[1,1];
end;
procedure
print;
var i,j:longint;
begin
for i:=1
to n do
for j:=1
to n do
if f[i,j]>max then max:=f[i,j];
write(max);
end;
begin
assign(input,'mouse.in'); reset(input);
assign(output,'mouse.out');rewrite(output);
init;
dfs(1,1);
print;
end.
JZOJ 3 18 1508 普及模擬 螞蟻
題目描述 在二維平面座標軸裡面,有n只螞蟻,第i只螞蟻所在的點的座標是 xi,yi 座標都是整數。所有螞蟻的移動速度都相等,都是每秒移動1個單位。每只螞蟻都有乙個固定的移動方向,是如下4種方向之一,都是平行於座標軸的 l n表示向北 即朝上 則y座標正方向。l e表示向東 即朝右 則x座標正方向。l...
JZOJ 3 18 1507 普及模擬 數列
題目描述 給定乙個等差數列,第一項是a,從第二項開始,每項與前一項的差都是乙個定值b。如果用數學形式來表示,那麼可以表示成 a b x 其中 x 0,且是整數。例如 a 1,b 2,那麼這個等差數列就是 1,3,5,7,9 再給定乙個等比數列,第一項是c,從第二項開始,每項是前一項的d倍。如果用數學...
數學 (JZOJ) 普及模擬 單元格
題目描述 在乙個r行c列的 裡,我們要選出3個不同的單元格。但要滿足如下的兩個條件 1 選中的任意兩個單元格都不在同一行。2 選中的任意兩個單元格都不在同一列。假設我們選中的單元格分別是 a,b,c,那麼我們定義這種選擇的 費用 f a b f b c f c a 其中f a b 是指單元格a到單元...