VIJOS1592不聽話的機器人

題面

DD 有一個不太聽話的機器人,這個機器人總是會有自己的想法,而不會完全遵守 DD 給它的指令。
描述
現在 DD 在試圖命令機器人走迷宮。迷宮是一個 N*N 個格子組成的區域,格子自左上角到右下角從 (1,1) 到 (N,N) 編號。第 i 行、第 j 列的格子編號爲 (i,j)。迷宮中的某些區域是障礙物,機器人不能移動到那裏。
DD 給了機器人 M 條指令,指令的類型包括“前進一步”“後退一步”“左轉九十度”“右轉九十度”。但問題是機器人並不能完全遵守這些指令,因爲如果機器人完全遵守這些指令,它可能會走到障礙物的格子裏或者走到迷宮外面去,那樣就會有危險。機器人希望從這個指令序列裏面去掉一些,然後執行剩下的指令時,可以保證整個過程中都不會有危險。
機器人雖然不太聽話,但它並不想惹惱了 DD,否則 DD 可能會把它拆掉的。所以機器人希望去掉的指令儘量少。
那麼,機器人最少需要去掉多少條指令才能保證不會有危險呢?
輸入格式
第一行有四個整數 N、M、X0、Y0。表示迷宮的大小是 N*N,指令共有 M 條,機器人初始時的位置是 (X0,Y0)。機器人初始時面朝的方向是上方。也就是說,若機器人按照初始時的方向走,效果是所在的 X 座標越來越小。
下面有 N 行,每行有 N 個字符,可能是點號 ‘.’ 或星號 ‘‘。’.’ 表示空地,’’ 表示障礙。初始位置肯定是一個空地。
下面的 M 行,每行有一個字符串,表示指令。字符串可能是:FORWARD(前進一步)、BACK(後退一步)、LEFT(左轉)、RIGHT(右轉)。
輸出格式
只需要輸出一個整數,表示機器人最少需要去掉多少條指令才能保證不出危險。
樣例1
樣例輸入1[複製]
4 7 3 3
.*
..**
..


LEFT
FORWARD
LEFT
BACK
FORWARD
RIGHT
FORWARD
樣例輸出1[複製]
1
限制
只有1s
提示
去掉第3條、第5條或者第7條指令都可以保證機器人無危險。
數據範圍:
迷宮的邊長 N<=100。
指令數 M<=1000。
來源
dd_engi大牛的題目~別的信息學網站上也有

總結

很裸的dp ,方程大致是
f[u][i][j][k]表示第u個操作走到第i行第j列方向k最少違反的指令
f[u][i][j][k]=min(f[u-1][i’][j’][k’],f[u-1][i][j][k]+1)
然而還是因爲各種各樣的原因WA了好久QAQ(尤其是及其逗的把&當^用)
需要注意的幾點是
1注意檢查邊界,特別是使用到滾動數組的情況。確保在dp過程中所有狀態都有賦予被正確定義的值。
2調試時,輸出調試將每個階段的狀態打印出來觀察比較容易找到錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章