dp 二分查詢dp判斷

2021-09-26 21:06:52 字數 859 閱讀 2932

題意

掃雷,在長度為 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判定當前...