題解 JZOJ 1352 遊蕩的奶牛

2021-09-19 09:26:28 字數 1512 閱讀 9031

奶牛們在被劃分成n行m列(2 <= n <= 100; 2 <= m <= 100)的草地上游走,試圖找到整塊草地中最美味的牧草。farmer john在某個時刻看見貝茜在位置(r1, c1),恰好t (0 < t <= 15)秒後,fj又在位置(r2, c2)與貝茜撞了正著。fj並不知道在這t秒內貝茜是否曾經到過(r2, c2),他能確定的只是,現在貝茜在那裡。

設s為奶牛在t秒內從(r1, c1)走到(r2, c2)所能選擇的路徑總數,fj希望有乙個程式來幫他計算這個值。每一秒內,奶牛會水平或垂直地移動1單位距離(奶牛總是在移動,不會在某秒內停在它上一秒所在的點)。草地上的某些地方有樹,自然,奶牛不能走到樹所在的位置,也不會走出草地。

現在你拿到了一張整塊草地的地形圖,其中』.『表示平坦的草地,』*'表示擋路的樹。你的任務是計算出,一頭在t秒內從(r1, c1)移動到(r2, c2)的奶牛可能經過的路徑有哪些。

第1行: 3個用空格隔開的整數:n,m,t

第2…n+1行: 第i+1行為m個連續的字元,描述了草地第i行各點的情況,保證 字元是』.『和』*'中的乙個

第n+2行: 4個用空格隔開的整數:r1,c1,r2,以及c2

第1行: 輸出s,含義如題中所述

開始看到這題,想的是廣搜,即從起點出發,到達終點就統計答案

最後發現由於路徑的選擇是可以走回頭路的,答案就會有特別多。

儘管障礙物會進行剪枝,但是時限是卡不進去的。

於是我們進行記憶化搜尋,狀態為dp[

i,j,

t]

dp[i,j,t]

dp[i,j

,t]表示從起點到達點(i,

j)

(i,j)

(i,j

),時限為t

tt的路徑數量。

根據加法原理,我們可以直接由上一狀態得到。

最後的結果即dp[

r1,c

1,t]

dp[r_1,c_1,t]

dp[r1​

,c1​

,t]

**:

#include

#include

#include

using

namespace std;

const

int maxn =

101;

const

int dx=

;const

int dy=

;char maze[maxn]

[maxn]

;int dp[maxn]

[maxn][20

];int n, m, t, r1, c1, r2, c2, ans;

struct white };

void

bfs(

int sx,

int sy));

dp[sx]

[sy][0

]=1;

while

(!q.

empty()

)}}}

intmain()

題解 遊蕩的奶牛 C

題目 題目描述 奶牛們在被劃分成n行m列 2 n 100 2 m 100 的草地上游走,試圖找到整塊草地中最美味的牧草。farmer john在某個時刻看見貝茜在位置 r1,c1 恰好t 0 t 15 秒後,fj又在位置 r2,c2 與貝茜撞了正著。fj並不知道在這t秒內貝茜是否曾經到過 r2,c2...

遊蕩的奶牛

fj 有 n 1 n 50,000 頭牛,fj的草地可以認為是一條直線。每只牛只喜歡在某個特定的範圍內吃草。第i頭牛喜歡在區間 s i,e i 吃草,1 s i e i s i e i 100,000,000 下面的樣例有5頭奶牛 這5頭奶牛的範圍分別是 2,4 1,12 4,5 7,10 7,8 ...

JZOJ 奶牛的歌聲 模擬

farmer john的n頭奶牛喜歡站成一排一起唱歌。每頭奶牛都有自己獨特的身高h,唱歌時的音量為v。每頭奶牛的歌聲都會從牠所在的位置出發,向佇列的兩邊傳播。並且有乙個奇特的事情 當某頭奶牛唱歌時,整個隊伍中,在左右兩個方向上,只有身高比牠高且與牠最接近的奶牛能聽見牠的歌聲 也就是說,任何一頭奶牛的...