題目傳送門
方法:二分答案+dfs
二分乙個mid,此次刺殺的最大傷害,作為判斷條件來dfs,二分,更新。
我們二分乙個答案mid來表示乙個界限,如果當前這個格仔的傷害代價比mid小則可以走否則就不走,每次check函式只需判斷能否從第一行走到最後一行即可,因為每一行的每個門都是相連的,所以只要有乙個能到,那麼我們再派m-1個人順著這條路過去再沿著橫向的門過去就好啦,因為第一行和最後一行的傷害值為零,所以這麼做莫得問題。
問:為什麼dfs時只要判斷是否能到達即可,我們不是要找他的最大值來表示這一次的傷害值嘛?
答:因為我們二分的這個值,最後二分出來的一定是某個點產生的傷害值,也就是我們最後的答案(是最大值嘛,判斷此點是否可行就是判斷他是否是比mid小,所以mid就是此次的最大值就是答案)這也解釋了為什麼我們二分的是傷害值最後卻可以輸出二分的邊界的問題。
//每次check乙個值dfs
//只要map[i][j]的值比mid小就能走
//否則就不能走
//二分答案
//每次check的時候記錄乙個flag
//flag每次清零
//如果在當前的check下能夠到達最後一行
//即令flag表示為真
//如果flag為真說明可以到達
//繼續二分答案
#include #include
#include
using
namespace
std;
const
int n = 1010
;int
n, m, map[n][n], l, r, mid, x, y;
int dx[4] = , dy[4] = ;
bool flag = 0
, vis[n][n];
intread()
while(isdigit(ch))
return s *w;
}void dfs(int xx, int
yy)
for(int i = 0; i < 4; i++)
}}bool check(int
x) int
main()
printf(
"%d\n
", r);
return0;
}
謝謝收看, 祝身體健康!
P1902 刺殺大使
題目 二分二分二分它又來了 p1902 刺殺大使 題目描述 某組織正在策劃一起對某大使的刺殺行動。他們來到了使館,準備完成此次刺殺,要進入使館首先必須通過使館前的防禦迷陣。迷陣由 n m 個相同的小房間組成,每個房間與相鄰四個房間之間有門可通行。在第 n 行的 m 個房間裡有 m 個機關,這些機關必...
洛谷p1902 刺殺大佬(霧)
最開始我想這個題,第一眼是棋盤dp,結果超時了,而後打了個dfs,超時超的比dp還狠,最後打了個二分 bfs,終於a了 結論 這個題真噁心,看來心裡沒點b樹 霧 include include include include using namespace std structin queue qw...
P1902 刺殺大使(二分 dfs)
1902 題目描述 某組織正在策劃一起對某大使的刺殺行動。他們來到了使館,準備完成此次刺殺,要進入使館首先必須通過使館前的防禦迷陣。迷陣由 n m 個相同的小房間組成,每個房間與相鄰四個房間之間有門可通行。在第 nn 行的 m 個房間裡有 m 個機關,這些機關必須全部開啟才可以進入大使館。而第 1 ...