题目大意:

给出n个点的坐标,求至少画多少掉直线才能连接所有点。

题目思路:状态压缩

首先经行预处理,求出所有状态下,那些点不在该状态内

以任意两点为端点求出这条直线的状态

枚举所有状态,找出不在当前状态下的两点,以这两点所形成的直线经行更新dp。

其中dp[i]表示在i状态下的最优解。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<vector>
#include<algorithm>
#define LL long long
#define MAXSIZE 20
#define INF 0X3f3f3f3f
using namespace std; int dp[],line[MAXSIZE][MAXSIZE];
vector<int>G[]; struct node
{
int x,y;
}point[]; int judge(int a,int b,int c)
{
return (point[a].y - point[c].y)*(point[b].x - point[c].x) == (point[b].y - point[c].y)*(point[a].x - point[c].x);
} int main()
{
for(int i=;i<;i++)
{
G[i].clear();
for(int j=;j<;j++)
{
if((i&(<<j)) == )
G[i].push_back(j);
}
} int T,n,cns=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d%d",&point[i].x,&point[i].y);
memset(line,,sizeof(line));
memset(dp,INF,sizeof(dp));
for(int i=;i<n;i++)
{
line[i][i]=;
for(int j=i+;j<n;j++)
{
for(int q=;q<n;q++)
{
if(judge(i,j,q))
{
line[i][j] |= (<<q);
}
}
}
}
dp[]=;
for(int i=;i<(<<n);i++)
{
int x=G[i][];
int len=G[i].size();
for(int j=;j<len;j++)
{
int y=G[i][j];
dp[i|line[x][y]] = min(dp[i|line[x][y]],dp[i]+);
}
}
printf("Case %d: %d\n",cns++,dp[(<<n)-]);
}
return ;
}

Light oj 1018 - Brush (IV) 状态压缩的更多相关文章

  1. Light OJ 1018 - Brush (IV)

    题目大意:     一个二维平面上有N个点,一把刷子,刷一次可以把一条线上的所有点都刷掉.问最少刷多少次,可以把全部的点都刷完 状态压缩DP, 用记忆化搜索来写, 需要有个优化不然会超时. ===== ...

  2. light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)

    题目链接 大概题意是有n个男的n个女的(原谅我这么说,我是粗人),给你一个n*n的矩阵,第i行第j列表示第i个女(男)对第j个男(女)的好感度,然后要安排n对相亲,保证都是正常的(无搞基百合之类的), ...

  3. Light OJ 1021 - Painful Bases(状态压缩DP)

    题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring ...

  4. 1018 - Brush (IV)

    1018 - Brush (IV)    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Muba ...

  5. Lightoj 1018 - Brush (IV)

    1018 - Brush (IV)    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Muba ...

  6. (状压) Brush (IV) (Light OJ 1018)

    http://www.lightoj.com/volume_showproblem.php?problem=1018   Mubashwir returned home from the contes ...

  7. [LightOJ 1018]Brush (IV)[状压DP]

    题目链接:http://lightoj.com/volume_showproblem.php? problem=1018 题意分析:平面上有不超过N个点,如今能够随意方向划直线将它们划去,问:最少要划 ...

  8. Light OJ 1019 - Brush (V)(图论-dijkstra)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1019 题目大意:Tanvir想从节点1的位置走到节点n的位置, 输出最短距离, ...

  9. Light OJ 1017 - Brush (III)

    题目大意:     在一个二维平面上有N个点,散落在这个平面上.现在要清理这些点.有一个刷子刷子的宽度是w. 刷子上连着一根绳子,刷子可以水平的移动(在X轴方向上).他可以把刷子放在任何一个地方然后开 ...

随机推荐

  1. vue,elementUI,less,axios,qs的安装及打包

    目前一直使用vue去搭建项目,我个人习惯用Visual Studio Code编辑工具,所以下面的所有操作都是在这个编辑器中 在安装的时候,为了避免安装过程中出错,你最好安装了淘宝镜像(官网:http ...

  2. JavaSE_坚持读源码_Class对象_Java1.7

    Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类 ...

  3. Openldap命令详解

    Openldap 客户端常用管理命令 1.ldapadd -x: 简答认证方式 -W: 不需要在命令上写密码 ldapapp -x -D "cn=Manager,dc=suixingpay, ...

  4. Sqlserver 数据库定时自动备份

    sqlserver 可以通过微软工具 SQL Server Management Studio  进行数据库定时自动备份,具体步骤如下: 1,打开SQL Server Management Studi ...

  5. Understanding Favicon

    Favicon 简介 Favicon : 是favorites icon 的缩写,被称为website icon . page icon. urlicon. 最初定义一个favicon的方法是将一个名 ...

  6. Kibana 搜索语法

    Kibana 搜索语法 Kibana 支持三种搜索语法, 分别是 Lucene query 语法, 基于 json 的 ES query语法, 以及 Kuery 语法. 前两种语法可以直接使用, Ku ...

  7. 四十、Linux 线程——互斥锁和读写锁

    40.1 互斥锁 40.1.1 介绍 互斥锁(mutex)是一种简单的加锁的方法来控制对共享资源的访问. 在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行访问. 若其他线程 ...

  8. 二十六、Linux 进程与信号---system 函数 和进程状态切换

    26.1 system 函数 26.1.1 函数说明 system(执行shell 命令)相关函数 fork,execve,waitpid,popen #include <stdlib.h> ...

  9. loj 10181 绿色通道 二分答案+单调队列DP

    空题段长度即为单调队列长度区间 每次二分答案进行check即可 #include<bits/stdc++.h> using namespace std; ; const int inf=0 ...

  10. c# c/s 框架的分页用户控件,还有事件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...