SCU2016 03 P題 二分 DLX可重複覆蓋

2021-07-14 13:53:25 字數 2242 閱讀 7846

analyse:

顯然二分半徑來解決該問題。

然後建立乙個m*n列的矩陣,判斷是否可以選擇不多於k行,讓n列都至少被覆蓋一次。

dlx可重複覆蓋模板套上即可。

get:

dlx可以解決精確覆蓋,可重複覆蓋等問題,而且可以限制選的行數。在限制的時候可以用a*算來進一步剪枝。

/**********************jibancanyang**************************

*author* :jibancanyang

*created time* : 五 7/ 8 11:43:36 2016

**problem**:

**code**:

***********************[email protected]**********************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef pair pii;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef

vector

vi;

#define pr(x) cout << #x << ": " << x << " "

#define pl(x) cout << #x << ": " << x << endl;

#define pri(a) printf("%d\n",(a))

#define xx first

#define yy second

#define sa(n) scanf("%d", &(n))

#define sal(n) scanf("%lld", &(n))

#define sai(n) scanf("%i64d", &(n))

#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++)

const

int mod = int(1e9) + 7, inf = 0x3f3f3f3f;

int n, m;

int k; //最多選擇k列

const

int maxnode = 3000;

const

int maxm = 55;

const

int maxn = 55;

struct dlx

r[m] = 0,l[0] = m;

len = m;//編號,每列都有乙個頭結點,編號1~m

for(int i = 1; i <= n; i++)

h[i] = -1;//每一行的頭結點

}void link(int r,int c)

}void del(int c)

}void resume(int c)

bool v[maxnode];

int f()}}

}return ret;

}bool dance(int d)

for(int i = d[c]; i != c; i = d[i])

return

false;

}}head;

struct point

point(double x, double y): x(x), y(y) {}

}city[55], radar[55];

double dist2(point &a, point &b)

int main(void)

}if (head.dance(0)) r = mid - 1e-8;

else l = mid + 1e-8;

}printf("%.6f\n", l);

}return

0;}

P1873 砍樹 二分裸題

題意 給出n顆樹,要砍這些樹,工具會揮向這些高度不一的平行的樹,掉落下來的高度的總和,就是砍掉的樹的長度總和 給出乙個至少砍到的長度值 題目中的樹的長度大於等於這個長度值 要求我們尋找乙個最優的高度,讓砍掉的數目長度盡量少,又能滿足題意 思路 這是二分經典題 我們定義乙個最大區間範圍之後,就開始ch...

二分入門題

在乙個遞增的序列裡,查詢元素是否存在,若存在輸出yes,不存在輸出no.本題多組資料,首先輸入乙個數字n,然後輸入n個數,資料保證數列遞增,然後再輸入乙個查詢數字。若存在輸出yes,不存在輸出no.4 1 3 5 8 3 yes include include includeusing namesp...

二分模版題

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每...