解法:状压dp,状态转移有2种
①:当前集合从2个不相交的集合得来O(3^n)
②:当前集合从相交的集合得来,但只有一个点重合,且不重合的点也只有一个,纸上画一下就知道。
#include"bits/stdc++.h"
using namespace std;
const int inf = 0x3f3f3f3f;
struct point{
int x,y;
point(){}
point(int x, int y):x(x),y(y){}
}p[17];
int f[1<<15];
int main()
{
#ifdef __LOCAL__
freopen("stdin1.txt","r",stdin);
#endif // __LOCAL__
int n;
while(~scanf("%d",&n)){
if(n == 0) break;
memset(f,inf,sizeof(f));
for(int i = 1; i <= n; i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
int S = 1<<n;
for(int sta = 0; sta < S; sta++){
int cnt = 0, u = -inf, d = inf, l = inf, r = -inf;
for(int i = 1; i <= n; i++) if(sta&(1<<(i-1))){