題解 遊蕩的奶牛 C

2022-05-11 16:28:40 字數 1670 閱讀 1299

題目

題目描述

奶牛們在被劃分成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,含義如題中所述。

輸入輸出樣例

輸入樣例#1:

4 5 6

….….……

1 3 1 5

輸出樣例#1:1說明

樣例說明:

草地被劃分成4 行5 列,奶牛在6 秒內從第1 行第3 列走到了第1 行第5 列。

奶牛在6 秒內從(1,3)走到(1,5)的方法只有一種(繞過她面前的樹)

思路這道題爆搜過不了!!!

我是用的bfs來做,那些想用dp/dfs的可以去看其他部落格或者繼續看這篇awa(和沒說一樣)

這道題目用bfs來做的話,因為是求方案數,所以對於每乙個走過的點,我們不能常規化的打上標記,以後不走,而是應該考慮記憶化搜尋,用f[i][j][k]表示第k秒到達點(i,j)的方案數,不難發現,如果f[i][j][k]不為0,那麼它四周的點是不可能在第k秒到達的,所以我們只需要知道它四周的點的f[i][j][k-1],一步步遞推(?)下去就可以了。

1 #include2

using

namespace

std;

3int

n,m,t,cnt;

4char a[101][101];5

struct

node6;

9 node(int xx,int yy,int

tt)10

13}st,ed;

14int dir[4][2]=,,,},f[55][55][22

];15

void

bfs(node s)

1636}37

}38return;39

}40intmain()

4149}50

inta,b,c,d;

51 cin>>a>>b>>c>>d;

52 f[a][b][0]=1

;53 st=node(a,b,0

);54 ed=node(c,d,t);

55bfs(st);

56 cout57return0;

58 }

遊蕩的奶牛

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 1352 遊蕩的奶牛

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

題解 奶牛隱藏

可以想到把奶牛當做水流,從最初奶牛在的節點,流到他最後停下的節點。但是時間不容易在圖上體現出來,考慮二分這個時間 這是網路流常見套路 然後判定在這個時間內,所有奶牛能否流到匯點。對於建圖,首先是對源點向每個點建一條邊,容量為這個點初始的奶牛數,每個點向匯點連一條邊,容量為這個點最多容納奶牛的數量。至...