題意
掃雷,在長度為 lenght 的街道上有 n 個地雷,再輸入每個地雷在街道上的位置,1<=lenght<=1e9,1<=n<=2000;
現有排雷範圍為w,2w的一次性排雷裝置,1<=w,分別由p、q個。現問w的值至少為多大。
思路
先二分找w,對於每次二分的值寫乙個函式進行判斷。用dp來判斷,設dp式
d[i][j]=res,i表示排除前i個地雷用了j個w型和res個2w型的排雷裝置。
題解
#include#define ll long long
using namespace std;
const int maxn = 2001;
int d[maxn][maxn], n, p, q, a[maxn], inf = 1e9 + 1;
int q1[maxn], q2[maxn];
void up(int &x, int y)
int ok(int i, int j, int w)
int gao(int w)
while (h2 < t2 && !ok(q2[h2], i, 2 * w)) //找到2w覆蓋點的範圍
h2++;
q2[t2++] = i;
for (int j = 0; j <= p; j++)
if (d[q2[h2] - 1][j] < q)
if (flag == inf)
return 0;
} return 1;
}int main()
cout<}
中位數(DP 二分)
單點時限 10.0 sec 記憶體限制 256 mb 你的地圖是一張白紙,所以即使想決定目的地,也不知道路在 qq 小方最近在自學圖論。他突然想出了乙個有趣的問題 一張由 n 個點,m 條邊構成的有向無環圖。每個點有點權 ai。qq 小方想知道所有起點為 1 終點為 n 的路徑中最大的中位數是多少。...
對測 離線DP 二分
本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 market market.c cpp pas input fifile market.in output fifile market.out time limit 1 seconds memory limit 128 megabytes...
hdu 3681 bfs 二分 狀壓dp判斷
思路 機械人從出發點出發要求走過所有的y,因為點很少,所以就能想到經典的tsp問題。首先bfs預處理出 y f g 之間的最短距離,由於g點可以充電,到達g點就把當前能量更新為電池容量然後繼續走。因為每個g點只能充一次電,這就好像tsp中的每個點只能走一次一樣,然後就是二分答案了,用狀壓dp判定當前...