トピックポータル
問題解決のアイデア:
F [i] [j]は離れI-ステップであるFJ、ベッシーの最小消費値は、ステップjを行く。式プッシュより良いです。
この事WA半分の時間として、見つけるために水平および垂直座標。
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <cmath> 4 5 使用 名前空間STDを、 6 7 長い 長 N、M、X、Y、XX、YY、F [ 1002 ] [ 1002 ]。 8 長い 長い X1 [ 2003 ]、Y11 [ 2003 ]、X2 [ 2003 ]、Y2 [ 2003 ]; 9 列L、L1。 10 11インライン長い 長分(長い 長い、長い 長いB){ 12 であれば(> b)に戻り、B。 図13は、 返します。 14 } 15 16インライン長い 長(LEN int型 ID、INT II){ 17 長い 長い uは= 0 ; 18 長い 長い lenx = ABS(X1 [ID] - X2 [II])。 19 長い 長い LENY = ABS(Y11 [ID] - Y2 [II])。 20 U = lenx * lenx + LENY * LENY。 21は 返すuと。 22 } 23 24 INTメイン(){ 25 のscanf(" %LLD%LLD%LLD%LLD%LLD%LLD "、&N、&M、&Y、およびX&YY、&XX)。 26 CIN >> L >> L1。 27 ×1 [ 0 ] = X; Y11 [ 0 ] = Y; X 2 [ 0 ] = XX; Y2 [ 0 ] = YY。 28 のために(INT iが= 1 ; iが<= N; I ++ ){ 29 IFが(L [I- 1 ] == ' W ')y--を、 30 であれば(L [I- 1 ] == ' E ')Y ++ 。 31 であれば(L [I- 1 ] == ' N ')x ++ 。 32 であれば(L [I- 1 ] == ' S ')x-- 。 33 X1 [I] = X; Y11 [I] = Y。 34 } 35 のために(INT iは= 1 ; iが<= M; I ++ ){ 36 であれば(L1 [I- 1 ] == ' W ')yy-- 。 37 であれば(L1 [I- 1 ] == ' E")YY ++ ; 38 であれば(L1 [I- 1 ] == ' N ')XX ++ 。 39 であれば(L1 [I- 1 ] == ' S ')xx-- 。 40 ×2 [I] = XX; Y2 [I] = YY。 41 } 42 のために(INT iは= 1 ; iが<= N; I ++)F [i]が[ 0 ] = F [I- 1 ] [ 0 ] + LEN(I、0 ); 43 のために(INT J = 1 ; J <= Mであり、j ++)F [0 ] [J] = F [ 0 ] [J- 1 ] + LEN(0 、j)は、 44 のために(INT iは= 1 ; iが<= N; I ++ ) 45 のための(INT J = 1 ; J <= Mであり、j ++ ) 46 F [I] [J] =分(F [I- 1 ] [J] 、分(F [I- 1 ] [J- 1 ]、F [i]は[J- 1 ]))+ LEN(i、j)は、 47 のprintf(" %のLLD " 、F [n]は[M])。 48 リターン 0 ; 49 }