HAOI2008 BZOJ1054 移動玩具

2022-08-03 14:30:27 字數 1467 閱讀 4700

time limit: 10 sec  memory limit: 162 mb

submit: 1277  solved: 695

[submit][status][discuss]

在乙個4*4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。

前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒有放置玩具。接著是乙個空行。接下來4行表示玩具的目標狀態,每行4個數字1或0,意義同上。

乙個整數,所需要的最少移動次數。

1111

0000

1110

0010

1010

0101

1010

0101

4直覺是雙向bfs,但是不會寫。於是就看了題解,第一次見這樣寫bfs,感覺好巧妙啊。

資料規模小,但情況種類還是不少的。加上hash判重(也是才學的),28ms ac。

#include#include

#include

#include

#include

#include

using

namespace

std;

intt,w,x,y,h,st,en;

bool ans[5][5

];bool flag,mark[66666

];char

c;struct

node

;node q[

66666

];const

int dx[5]=;

const

int dy[5]=;

int hash(bool a[5][5

])

returns;}

intmain()

getchar();

}getchar();

for (int i=1;i<=4;i++)

getchar();

}st=hash(q[1

].a);

en=hash(ans);

if (st==en)

mark[st]=1

; t=0; w=1; q[1].step=0

;

while (tw++;

memcpy(q[w].a,q[t].a,

sizeof

(q[w].a));

q[w].step=q[t].step+1

; mark[h]=true

; }

swap(q[t].a[i][j],q[t].a[x][y]);}}

return0;

}

BZOJ 1055 HAOI2008 玩具取名

題目 分析 正著想不好搞,狀態太多,也不好轉移,肯定超時。於是我們反著想,將一條字串歸約成乙個字母,首先能想到乙個字串必須要先變成字母,才能變成乙個字母,而且這兩個字母中的第乙個字母一定是由左邊歸約出來的,第二個字母是由右邊歸約出來的。好的思路馬上就來了,我們用dp i j k 表示字串 i,j 能...

Bzoj 1054 HAOI2008 移動玩具

在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒...

BZOJ1042 HAOI2008 硬幣購物

description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買si的價值的東西。請問每次有多少種付款方法。input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s output 每次的方法...