jzoj 1579 普及模擬 老鼠 解題報告

2021-07-15 00:14:26 字數 1956 閱讀 9386

時間限制: 

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 1

1 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到單元...