BZOJ5299:[CQOI2018]解锁屏幕(状压DP)
Description


Input
Output
Sample Input
0 0
1 1
2 2
3 3
Sample Output
解释:设4个点编号为1到4,方案有1→2→3→4,2→1→3→4,3→2→1→4,2→3→1→4,
及其镜像4→3→2→1,3→4→2→1,2→3→4→1,3→2→4→1.
Solution
不知道CQ省选为什么会出状压板子题
先预处理出连接两点会经过哪些点
然后f[i][S]表示以i结尾,当前已经选中的点状态为S
从小到大枚举S进行转移
理论复杂度n^2*2^n,然而肯定跑不满就是了。
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define N (600000)
using namespace std;
int n,x[N],y[N],f[][N],line[][],ans,num[N]; double K(double x1,double y1,double x2,double y2)
{
if (x1==x2) return ;
if (y1==y2) return ;
return (y2-y1)/(x2-x1);
} int main()
{
scanf("%d",&n);
for (int i=; i<=n; ++i)
scanf("%d%d",&x[i],&y[i]); for (int i=; i<=n-; ++i)
for (int j=i+; j<=n; ++j)
{
line[i][j]=line[j][i]=(<<i-)|(<<j-);
for (int k=; k<=n; ++k)
{
if (abs(K(x[k],y[k],x[i],y[i])-K(x[j],y[j],x[i],y[i]))>1e-) continue;
if (!( x[k]>=min(x[i],x[j]) && x[k]<=max(x[i],x[j]) )) continue;
if (!( y[k]>=min(y[i],y[j]) && y[k]<=max(y[i],y[j]) )) continue;
line[i][j]|=(<<k-), line[j][i]=line[i][j];
}
} for (int i=; i<=n; ++i)
f[i][<<i-]=;
for (int i=; i<=(<<n)-; ++i)
for (int j=; j<=n; ++j)
if (i&(<<j-))
for (int k=; k<=n; ++k)
if (!(i&(<<k-)) && (((i|line[j][k])^(<<k-)))==i)
(f[k][i|(<<k-)]+=f[j][i])%=; for (int i=; i<=(<<n)-; ++i)
{
int x=i,cnt=;
for (int j=; j<=n; ++j){if (x&) cnt++; x>>=;}
if (cnt<) continue;
for (int j=; j<=n; ++j)
(ans+=f[j][i])%=;
}
printf("%d",ans);
}
BZOJ5299:[CQOI2018]解锁屏幕(状压DP)的更多相关文章
- bzoj 5299: [Cqoi2018]解锁屏幕 状压dp+二进制
比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: ...
- bzoj5299: [Cqoi2018]解锁屏幕
题目链接 bzoj 5299: [Cqoi2018]解锁屏幕 题解 很水的装压dp,相信没人需要看题解.... dp[i][j]表示状态为i最后一个到的点为j,然后转移就很好写了 不过 我读入优化没读 ...
- BZOJ5299 [Cqoi2018]解锁屏幕 【状压dp】
题目链接 BZOJ5299 题解 就一个毒瘤卡常题..写了那么久 设\(f[i][s]\)表示选了集合\(s\)中的点,最后一个是\(i\),进行转移 要先预处理出两点间的点,然后卡卡常就可以过了 # ...
- [学习笔记]状压dp
状压 \(dp\) 1.[SDOI2009]Bill的挑战 \(f[i][j]\) 表示匹配到字符串的第 \(i\) 位状态为 \(j\) 的方案数 那么方程就很明显了,每次枚举第 \(i\) 位的字 ...
- [Luogu] P4460 [CQOI2018]解锁屏幕
题目背景 使用过Android 手机的同学一定对手势解锁屏幕不陌生.Android 的解锁屏幕由3X3 个点组成,手指在屏幕上画一条线,将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
随机推荐
- MVC中FileResult 返回类型返回Excel
公司中以前写的导出有问题.原来使用的XML格式字符串拼接然后转化成流输出 action public FileResult ExportJobFair() { try { string name = ...
- The Internet Communications Engine (Ice) 跨平台异构通讯方案 第一弹-ICE简介
.net中的通讯方案很多,从.net Remoting,MSMQ,Webservice,WSE,WCF等等,他们都有一个特点,易用,但是都不能跨语种异构,如果你服务端要用java开发,客户端用C#开发 ...
- Node.js学习笔记(一) --- HTTP 模块、URL 模块、supervisor 工具
一.Node.js创建第一个应用 如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器, 来处理客户端的请求相应.不过对 Node.js 来说,概念完全 ...
- jsp servlet基础复习 Part1
jsp和servlet的一些基础知识整理,用于备忘. 一.jsp与servlet的基本关系 1.jsp-->web容器-->servlet-->加载进容器的虚拟机执行-->输出 ...
- HTML DOM status 属性
<!DOCTYPE html><html> <head>HTML DOM status 属性</head><body><script ...
- 配置centos7 网卡
进入root模式,输入 cd /etc/sysconfig/network-scripts/ 按Tab键查看网卡配置文件名称,然后进入编辑: 如: cd /etc/sysconfig/network- ...
- 图片大于div时的居中显示
当图片大于div时,想要图片居中显示,如果图片等比例缩小可能会导致图片不能填充整个div,如果直接将图片不设置宽高,将其外层div设置overflow:hidden:这时即使外层div设置了水平垂直居 ...
- js内存空间详细图解-笔记
原文参考http://mp.weixin.qq.com/s/NGqdjhoU3MR9LD0yH6tKIw 栈-先进后出堆-类比成书于书架(形象),只要知道Key就可以找到value 基础数据类型(Un ...
- maven仓库阿里云镜像配置
我们每次新建一个maven项目的时候,加上pom.xml配置时,如果你没有配置本地仓库,maven会去中央仓库去加载jar包,那样速度真的是异常的慢啊,并且每次update maven项目的,速度也是 ...
- 【Markdown】Latex基本语法
Latex基本语法 注意点:Markdown 斜杠/ 转义字符! LaTeX 是大神Leslie Lamport 的杰作,该神是2013年图灵奖的获得者,感兴趣可以去瞻仰一下神人的相关著述: http ...