P1902 刺殺大使(BFS 二分答案)

2021-08-09 11:20:05 字數 1928 閱讀 6015

(from:luogu)

題目描述

伊朗伊斯蘭革命衛隊(某恐怖組織)正在策劃一起刺殺行動,他們的目標是沙特駐美大 使朱拜爾。他們來到了沙特駐美使館,準備完成此次刺殺,要進入使館首先必須通過使館前 的防禦迷陣。

迷陣由 n*m 個相同的小房間組成,每個房間與相鄰四個房間之間有門可通行。在第 n 行的 m 個房間裡有 m 個機關,這些機關必須全部開啟才可以進入大使館。而第 1 行的 m 個 房間有 m 扇向外開啟的門,是迷陣的入口。除了第 1 行和第 n 行的房間外,每個房間都被 使館的安保人員安裝了雷射殺傷裝置,將會對進入房間的人造成一定的傷害。第 i 行第 j 列 造成的傷害值為 p[i][j](第 1 行和第 n 行的 p 值全部為 0)。

現在伊斯蘭革命衛隊打算以最小傷害代價進入迷陣,開啟全部機關,顯然,他們可以選 擇任意多的人從任意的門進入,但必須到達第 n 行的每個房間。乙個士兵受到的傷害值為他 到達某個機關的路徑上所有房間的傷害值中的最大值,整個部隊受到的傷害值為所有士兵的 傷害值中的最大值。現在,這個恐怖組織掌握了迷陣的情況,他們需要提前知道怎麼安排士 兵的行進路線可以使得整個部隊的傷害值最小。

輸入輸出格式

輸入格式:

第一行有兩個整數 n,m,表示迷陣的大小。

接下來 n 行,每行 m 個數,第 i 行第 j 列的數表示 p[i][j]。

輸出格式:

輸出乙個數,表示最小傷害代價。

輸入輸出樣例

輸入樣例#1:

4 2

0 0

3 5

2 4

0 0

輸出樣例#1:

3 說明

50%的資料,n,m<=100;

100%的資料,n,m<=1000,p[i][j]<=1000。

這個題目簡單來說就是在矩陣上找到一條從第一行到最後一行的路徑,使路徑上節點的「最大值最小」,看到這個字眼,我們直接就能想到二分答案的做法。

我們能比較容易的想到我們去二分乙個所謂的路徑最大值,所以我們只需要檢驗二分出來的路徑最大值是否能夠成立即可,而我們檢驗路徑的方法就是用bfs。

在做bfs的時候,為了防止狀態空間過大,我們用乙個bool陣列來存是否可達某位置。最後檢驗一下是否能夠到達第n行的任意點即可。

這裡我們需要注意一下對於整數而言的二分技巧,就是用乙個ans記錄最近當前的可行解。

P1902 刺殺大使

題目 二分二分二分它又來了 p1902 刺殺大使 題目描述 某組織正在策劃一起對某大使的刺殺行動。他們來到了使館,準備完成此次刺殺,要進入使館首先必須通過使館前的防禦迷陣。迷陣由 n m 個相同的小房間組成,每個房間與相鄰四個房間之間有門可通行。在第 n 行的 m 個房間裡有 m 個機關,這些機關必...

洛谷p1902刺殺大使題解

題目傳送門 方法 二分答案 dfs 二分乙個mid,此次刺殺的最大傷害,作為判斷條件來dfs,二分,更新。我們二分乙個答案mid來表示乙個界限,如果當前這個格仔的傷害代價比mid小則可以走否則就不走,每次check函式只需判斷能否從第一行走到最後一行即可,因為每一行的每個門都是相連的,所以只要有乙個...

洛谷p1902 刺殺大佬(霧)

最開始我想這個題,第一眼是棋盤dp,結果超時了,而後打了個dfs,超時超的比dp還狠,最後打了個二分 bfs,終於a了 結論 這個題真噁心,看來心裡沒點b樹 霧 include include include include using namespace std structin queue qw...