uva 1025,城市的間諜

2022-04-01 08:18:27 字數 1182 閱讀 5046

題意:地鐵是線性的,有n個站,編號(1~n),m1輛從左至右的車,和m2輛從右至左的車,發車時刻給出,然後是,每兩個站之間要跑多長時間。乙個間諜要從1車站到n車站,但是他要求等車的時間最短,不然間諜會被抓,有可能到不了,輸出impossible.

分析:影響每一步的決策只有兩個因素,1,時刻,2,哪乙個車站。那麼dp狀態就出來了dp[t][n]在t時刻,第n個站還要等多少分鐘。

狀態轉移:只有三個情況,要麼是等一分鐘,要麼是上左邊的車,要麼是上右邊的車。

邊界條件dp[t][n] = 0;不用等了。

dp[i][j] = min(dp[i+1][j]+1,dp[i+t[j]][j+1],dp[i+t[j-1]][j-1]);

然後就是求has_train[2]陣列了。具體看程式。

#include using

namespace

std;

#define inf 0x3f3f3f3f

intn;

intt;

int t[55

];int has_train[205][55][2

];int dp[205][55

];int

main()

intm1,m2;

scanf("%d

",&m1);

memset(has_train,

0,sizeof

(has_train));

while(m1--)

}scanf("%d

",&m2);

while(m2--)

}for(int i=1; i<=n-1; i++)

dp[t][i] =inf;

dp[t][n] = 0

;

for(int i = t-1; i>=0; i--)

if(j>1&&has_train[i][j][1]&&i+t[j-1]<=t)}}

printf(

"case number %d:

",cases++);

if(dp[0][1]>=inf) printf("

impossible\n");

else printf("

%d\n

",dp[0][1

]); }

return0;

}

view code

UVa 1025 城市裡的間諜

題意 乙個間諜要從第乙個車站到第n個車站去會見另乙個,在是期間有n個車站,有來回的車站,讓你在時間t內時到達n,並且等車時間最短,輸出最短等車時間。思路 先用乙個has train t i 0 來表示在t時刻,在車站i,是否有往右開的車。同理,has train t i 1 用來儲存是否有往左開的車...

地鐵裡的間諜 UVA 1025 DP

題目大意 某城市的地鐵是線性的,有n 2 n 50 個車站,從左到右編號為1 n。有m1輛列車從第1站開始往右開,還有m2輛列車從第n站開始往左開。在時刻0,mario從第1站出發,目的是在時刻t 0 t 200 會見車站n的乙個間諜。在車站等車時容易被抓,所以她決定盡量躲在開動的火車上,讓在車站等...

動態規劃 城市裡的間諜

解題思路 本題利用動態規劃解決,時刻i和所在的車站j構成了乙個狀態,每個狀態都有三種決策 1 等待1分鐘。2 搭乘向右開的車 如果有 3 搭乘向左開的車 如果有 如果用d i,j 表示在時刻i,位於車站j時最少的等待時間,那麼對於三種決策,可得到如下的狀態轉移方程 1 d i,j d i 1,j 1...