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行,每...