Loj 2536 解锁屏幕
Loj 2536 解锁屏幕
- 状态比较显然的状压 \(dp\) ,设 \(f[S][i]\) 表示连接 \(S\) 集合中的点,最后到的点是 \(i\) 的方案数.
- 转移时,枚举一个 \(j\notin S\) ,那么只要 \(i,j\) 连线没有跨过在 \(S\) 中的点,就可以转移, \(f[S|(1<<j)][j]+=f[S][i]\) .
- 可以 \(O(n^3)\) 预处理出每两个点连线跨过的点的集合.这样总时间复杂度为 \(O(2^n\cdot n^2)\) .
很多状压 \(dp\) 的优化都是预处理合法的状态/转移?
- 枚举集合时可以从小到大直接枚举,因为 \(S\) 只能转移到比它大的 \(S'\) ,所以从小到大本身就是一个合法的拓扑序.
#include<bits/stdc++.h>
inline int pos(int S,int i)
{
return (S>>i)&1;
}
using namespace std;
typedef long long ll;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
fh=-1,jp=getchar();
while (jp>='0'&&jp<='9')
out=out*10+jp-'0',jp=getchar();
return out*fh;
}
const int P=1e8+7;
inline int add(ll a,int b)
{
return a+b>=P?a+b-P:a+b;
}
const int MAXN=20;
int n,x[MAXN],y[MAXN];
int Cross[MAXN][MAXN];
int f[(1<<MAXN)+10][MAXN+10];
int ans=0;
int count(int x)
{
int s=0;
while(x)
{
s+=(x&1);
x>>=1;
}
return s;
}
int main()
{
// freopen("data.in","r",stdin);
n=read();
for(int i=0; i<n; ++i)
x[i]=read(),y[i]=read();
for(int i=0; i<n; ++i)
for(int j=0; j<n; ++j)
if(i!=j)
for(int k=0; k<n; ++k)
{
if(i!=k && j!=k && x[i]<=x[k] && x[k]<=x[j] && y[i]<=y[k] && y[k]<=y[j] && (y[k]-y[i])*(x[k]-x[j])==(y[k]-y[j])*(x[k]-x[i]))
{
Cross[i][j]|=(1<<k);
Cross[j][i]|=(1<<k);
}
}
for(int i=0; i<n; ++i)
f[1<<i][i]=1;
int lim=(1<<n);
for(int S=1; S<lim; ++S)
for(int i=0; i<n; ++i)
if(pos(S,i) && f[S][i])
{
for(int j=0; j<n; ++j)
if(pos(S,j)==0 && ((S&Cross[i][j])==Cross[i][j]))
f[S|(1<<j)][j]=add(f[S|(1<<j)][j],f[S][i]);
}
for(int S=0; S<lim; ++S)
if(count(S)>=4)
{
for(int i=0; i<n; ++i)
ans=add(ans,f[S][i]);
}
cout<<ans<<endl;
return 0;
}
Loj 2536 解锁屏幕的更多相关文章
- Activator 通过SSH解锁屏幕等手势操作
来源:https://qunwang6.github.io/blog/Activator/ Activator 发表于 2015-10-24 | 分类于 iOS Activator Activ ...
- bzoj5299: [Cqoi2018]解锁屏幕
题目链接 bzoj 5299: [Cqoi2018]解锁屏幕 题解 很水的装压dp,相信没人需要看题解.... dp[i][j]表示状态为i最后一个到的点为j,然后转移就很好写了 不过 我读入优化没读 ...
- BZOJ5299:[CQOI2018]解锁屏幕(状压DP)
Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由3x3个点组成,手指在屏幕上画一条 线将其中一些点连接起来,即可构成一个解锁图案.如下面三个例 ...
- 【BZOJ5299】【CQOI2018】解锁屏幕(动态规划,状态压缩)
[BZOJ5299][CQOI2018]解锁屏幕(动态规划,状态压缩) 题面 BZOJ 洛谷 Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由 ...
- [Luogu] P4460 [CQOI2018]解锁屏幕
题目背景 使用过Android 手机的同学一定对手势解锁屏幕不陌生.Android 的解锁屏幕由3X3 个点组成,手指在屏幕上画一条线,将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: ...
- P4460 [CQOI2018]解锁屏幕
算是我比较擅长的类型,自己想想就会了.普通小状压,状态傻子都能想出来.一开始裸的枚举T了,30.后来与处理之后跑的飞起,就是不对,还是30分.后来看讨论版...mod竟然是1e8+7!!!这不有毒吗. ...
- 【LOJ】#2536. 「CQOI2018」解锁屏幕
题解 什么破题,看一眼就能想出来\(n^2 2^n\)看了一眼数据范围有点虚,结果跑得飞快= = 处理出\(a[i][j]\)表示从\(i\)到\(j\)经过的点的点集 然后\(f[i][S]\)表示 ...
- [CQOI2018]解锁屏幕
嘟嘟嘟 这题感觉真的很简单-- \(O(n ^ 2 logn)\)的做法特别好理解,但得开O2. 看数据范围,肯定是状压dp.但刚开始我没想通状压啥,因为点与点之间还有顺序问题.但后来发现这个顺序是子 ...
- [CQOI 2018]解锁屏幕
Description 题库链接 给出平面上 \(n\) 个点,一开始你可以选任何一个点作为起点,接着对于每一个你在的位置,你可以选取一个未走过的点.将路径(线段)上所有的点均选上(包括起点终点),并 ...
随机推荐
- js 文件上传
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- 【Mac】小技巧:实现ssh服务器别名免密登录
前言 我们平常使用ssh user@host然后输入密码的方式来远程链接一个服务器,但是,如果要管理的服务器太多,记住这些服务器的IP和用户名.密码就是一个复杂的工作.当然,我们可以把这些信息用文档记 ...
- nodejs 监听文件夹变化的模块
使用Node.JS监听文件夹变化 fs.watch 其中Node.JS的文件系统也可侦听某个目录的改变, 如fs.watch 其中fs.watch的最大缺点就是不支持子文件夹的侦听,并且在很多情况 ...
- Java开发常用Util工具类-StringUtil、CastUtil、CollectionUtil、ArrayUtil、PropsUtil
字符串工具类 StringUtil.java package com.***.util; /** * StringUtil * @description: 字符串工具类 **/ public clas ...
- 输入每个值连续出现几次的问题(其中包括while括号中出现任意输入问题)
#include<iostream> int main() { //统计输入的每个值,连续出现了多少次 std::cout<<" please enter the n ...
- python-day29--socket
一 .客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 二. 三. 1.互联网协议就相当于计算机界的英语 2.数据传输的过程中包头一定要是固定的长度 四.socket层的位置 so ...
- Leetcode 77
//这似乎是排列组合的标准写法了已经class Solution { public: vector<vector<int>> combine(int n, int k) { v ...
- 56. Merge Intervals 57. Insert Interval *HARD*
1. Merge Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[ ...
- iOS UI-(多)视图控制器的生命周期、加载方法和模态视图方法以及屌丝方法
#import "ViewController.h" #import "SecondViewController.h" @interface ViewContr ...
- React Js 之JSX
React使用JSX作为模板替换JavaScript,它不是必须的,但是它是推荐使用.原因如下: 1.它比传统的JavaScript更快,因为编译代码的时候,JSX做了相应的优化 2.它是类型安全的, ...