description
澤澤已52:0的比分輸了球,被足球流氓打了一頓,扔進了窨井裡……
出來的時候,澤澤已經在埃及了。
滾滾的黃沙在周圍飛舞,沒有一樣生物在這裡棲息。澤澤不想就掛在這裡。忽然,澤澤被風沙遮住的眼睛瞥見了一座金字塔。這是一座很雄偉的金字塔,而且重要的是,金字塔頂端,竟然有一架直公升飛機!
澤澤就像抓到了救命稻草,用他在長城上999999999999999999 mod 2倍的速度瘋狂向金字塔奔跑。來到金字塔下,風把他刮進了金字塔。
門「轟隆隆」地關上了。澤澤看見裡面陳列著很多珍品,但依然存在著暗器。但是還好,有個盜墓的把木乃伊給挖走了,所以在金字塔裡沒有跳動的殭屍。澤澤需要做的就是盡快跑想金字塔的頂端。
現在澤澤在金字塔最底層的左上角。他可以向前後左右或走到樓上去,但必須花費一點時間。一旦走到樓上後樓下的門就會關閉,澤澤不能回下去了,因此澤澤格外小心。幸運的是,金字塔很巧妙。在金字塔裡有一些暗道,可以從某點直接通向某點,而不用再走最平常的路線,也是只能上不能下。澤澤知道這些暗道在**,而且知道走到每個地方的所花費的時間。
現在你要做的就是算出澤澤走到金字塔頂端所花最少的時間。
注意:
第n層第i行第j列我們表示成n,i,j。當n>=2時,n,i,j可以由4個位置走來(不包括暗道)。如3,1,1可以從2,1,1或2,1,2或2,2,1或2,2,2走來。
如圖所示,一座大小為3的金字塔的俯檢視就是這個樣子的。從a(2,1,1)、b(2,1,2)、c(2,2,1)、d(2,2,2)都可以走到e(3,1,1)。其他位置依次類推。
input
第1行為2個整數n,m。n表示金字塔的底部邊長以及高,m表示有多少暗道。
接下來有n張正方形的圖,每張圖用乙個回車隔開,表示從最底層到最高層的每個位置所花費的時間。保證上面的圖的邊長比下面圖的多1。(如樣例,這座大小為4的金字塔第1層是4*4的,第2層是3*3,第3層是2*2,第4層是1*1。)
接下來的m行,每行7個整數ai1,bi1,ci1,ai2,bi2,ci2,pi。表示 第ai1層的第bi1行第ci1列 到 第ai2層的第bi2行第ci2列 之間有一條時間為pi的暗道。保證ai1
output
乙個整數,即澤澤走到金字塔頂端的最短時間。
sample input
4 24 1 5 2
4 3 4 7
1 9 2 8
0 3 5 1
2 8 5
9 3 9
1 1 8
7 4
5 21 1 2 2 3 1 1
1 3 2 2 2 1 7
sample output
52 題目提示
流程:
1 澤澤一開始在1,1,1的位置,總時間為0+4=4。
2 從1,1,1走到1,1,2,總時間為4+1=5。
3 走暗道到了2,3,1,總時間為5+1+1=7。
4 從2,3,1走到2,3,2,總時間為7+1=8。
5 再上樓到了3,2,2,總時間為8+2=10。
6 再上樓到了4,1,1,總時間為10+42=52。
hint
資料範圍
對於50%的資料,n<=5
對於100%的資料,n<=100,m<=50,每格的暗道總數不超過10個。
這題就是記憶化搜尋+dp就可以acc,聽說有大犇用水法水過。
設f[i,j,k]為到第i層第j行第k列的最少時間
定乙個過程為,向四個方向判斷,這個點有沒有出界,再將f[i,j,k]=min(f[i,j-1,k],f[i,j,k-1],f[i,j+1,k],f[i,j,k+1])
現將第n層(也就最下面一層),dp出來,f[n,j,k]:=max(f[n,j,k]+min(f[n,j,k-1],f[n,j,k-1])+a[j,k])
然後就從(n,j,k)搜尋到f[n,j,k]的最小時間。
在乙個迴圈判斷從這層的下一層到這層,所需的最小時間。最後輸出f[1,1,1]
**如下:
type
arr=record
a,b,c,p:longint;
end;
var i,j,k,a1,a2,b1,b2,c1,c2,t,time,n,m:longint;
l:array[0..100,0..100,0..100,0..10]of arr;
a,f,s:array[0..100,0..100,0..100]of longint;
procedure
init;
begin
readln(n,m);
for i:=n downto1do
for j:=1
to i do
begin
for k:=1
to i do
read(a[i,j,k]);
readln;
end;
for i:=1
to m do
begin
readln(a1,b1,c1,a2,b2,c2,time);
a1:=n+1-a1;
a2:=n+1-a2;
inc(s[a2,b2,c2]);
l[a2,b2,c2,s[a2,b2,c2]].a:=a1;
l[a2,b2,c2,s[a2,b2,c2]].b:=b1;
l[a2,b2,c2,s[a2,b2,c2]].c:=c1;
l[a2,b2,c2,s[a2,b2,c2]].p:=time;
end;
for i:=2
to n do
for j:=0
to i+1
dofor k:=0
to i+1
do f[i,j,k]:=99999999;
end;
procedure
sos(i,j,k:longint);
begin
if f[i,j,k-1]<99999999
then
if f[i,j,k-1]>f[i,j,k]+a[i,j,k-1] then
begin
f[i,j,k-1]:=f[i,j,k]+a[i,j,k-1];
sos(i,j,k-1);
end;
if f[i,j-1,k]<99999999
then
if f[i,j-1,k]>f[i,j,k]+a[i,j-1,k] then
begin
f[i,j-1,k]:=f[i,j,k]+a[i,j-1,k];
sos(i,j-1,k);
end;
if f[i,j,k+1]<99999999
then
if f[i,j,k+1]>f[i,j,k]+a[i,j,k+1] then
begin
f[i,j,k+1]:=f[i,j,k]+a[i,j,k+1];
sos(i,j,k+1);
end;
if f[i,j+1,k]<99999999
then
if f[i,j+1,k]>f[i,j,k]+a[i,j+1,k] then
begin
f[i,j+1,k]:=f[i,j,k]+a[i,j+1,k];
sos(i,j+1,k);
end;
end;
function
min(a,b:longint):longint;
begin
if a>b then
exit(b) else
exit(a);
end;
procedure
main;
begin
f[n,1,1]:=a[n,1,1];
for j:=1
to n do
for k:=1
to n do
f[n,j,k]:=min(f[n,j,k],min(f[n,j-1,k],f[n,j,k-1])+a[n,j,k]);
sos(n,j,k);
for i:=n-1
downto1do
begin
for j:=1
to i do
for k:=1
to i do
begin
a1:=min(f[i+1,j,k],f[i+1,j,k+1]);
a2:=min(f[i+1,j+1,k],f[i+1,j+1,k+1]);
f[i,j,k]:=min(a1,a2)+a[i,j,k];
for t:=1
to s[i,j,k] do
begin
a1:=l[i,j,k,t].a;
b1:=l[i,j,k,t].b;
c1:=l[i,j,k,t].c;
time:=l[i,j,k,t].p;
if f[a1,b1,c1]+time+a[i,j,k]then
f[i,j,k]:=f[a1,b1,c1]+time+a[i,j,k];
end;
end;
for j:=1
to i do
for k:=1
to i do
sos(i,j,k);
end;
end;
begin
init;
main;
writeln(f[1,1,1]);
end.
SSL 1580 澤澤在埃及
description 澤澤已52 0的比分輸了球,被足球流氓打了一頓,扔進了窨井裡 出來的時候,澤澤已經在埃及了。滾滾的黃沙在周圍飛舞,沒有一樣生物在這裡棲息。澤澤不想就掛在這裡。忽然,澤澤被風沙遮住的眼睛瞥見了一座金字塔。這是一座很雄偉的金字塔,而且重要的是,金字塔頂端,竟然有一架直公升飛機!澤...
SSL 1579 澤澤在巴西
description 澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告訴他這扇門能通往好地方,具體好到什麼程度要看澤澤人品。澤澤毫不猶豫地走了進去 澤澤來到了足球王國 巴西。這可是個好地方,澤澤看來人品攢了不少了。這裡大街小巷都在踢足球,其樂無窮。突然,澤澤被乙...
SSL1579 澤澤在巴西 spfa
澤澤在巴西 time limit 10000ms memory limit 65536k total submit 81 accepted 29 case time limit 1000ms description 澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告...