bzoj5299: [Cqoi2018]解锁屏幕
题目链接
题解
很水的装压dp,相信没人需要看题解....
dp[i][j]表示状态为i最后一个到的点为j,然后转移就很好写了
不过 我读入优化没读负数 ,为什么mod1e8 +7,我 mod 1e9 + 7 啊,WA了两发
#include<cstdio>
#include<vector>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-')f = -1; c = getchar();}
while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar();
return x * f;
}
#define mod 100000007
int n;
const int maxn = 21;
struct node {
int x,y;
bool operator < (const node &a)const {
if(x == a.x) return y < a.y;
return x < a.x;
}
} loc[maxn];
int dp[(1 << maxn) + 7][maxn];
int po[maxn][maxn];
void get(node x,node y,int X,int Y) {
int a = y.y - x.y , b = x.x - y.x , c = y.x * x.y - x.x * y.y;
int tmp = 0;
for(int i = X + 1;i < Y;++ i) {
if(loc[i].x * a + loc[i].y * b + c == 0)
tmp |= (1 << i);
//if(i != Y)vec[X].push_back(i); if(i != X)vec[Y].pish_back(i);
}
po[X][Y] = tmp | (1 << X); // ^ (1 << Y);
po[Y][X] = tmp | (1 << Y); // ^ (1 << X);
//printf("%d\n",tmp);
}
int main() {
n = read();
for(int i = 0;i < n;++ i)
loc[i].x = read(),loc[i].y = read();
std::sort(loc,loc + n);
for(int i = 0;i < n;++ i)
for(int j = i + 1;j < n;++ j)
get(loc[i],loc[j],i,j);
int ans = 0;
for(int i = 0;i < n;++ i) dp[1 << i][i] = 1;
for(int i = 0;i < (1 << n);++ i) {
//ans = 0;
for(int j = 0;j < n;++ j) {
if(((1 << j) & i)) continue;
for(int k = 0;k < n;++ k) {
if(!((1 << k) & i)) continue;
if((po[k][j] & i) == po[k][j]){dp[i | (1 << j)][j] = (dp[i | (1 << j)][j] + dp[i][k]) % mod;}
}
}
}
for(int K,i = 0;i < (1 << n);++ i) {
K = 0;
for(int t = i;t;t >>= 1) if(t & 1)K ++;
if(K >= 4) {
for(int k = 0;k < n;++ k)
ans = (ans + dp[i][k]) % mod;
}
}
printf("%d\n",ans);
return 0;
}
bzoj5299: [Cqoi2018]解锁屏幕的更多相关文章
- BZOJ5299:[CQOI2018]解锁屏幕(状压DP)
Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由3x3个点组成,手指在屏幕上画一条 线将其中一些点连接起来,即可构成一个解锁图案.如下面三个例 ...
- BZOJ5299 [Cqoi2018]解锁屏幕 【状压dp】
题目链接 BZOJ5299 题解 就一个毒瘤卡常题..写了那么久 设\(f[i][s]\)表示选了集合\(s\)中的点,最后一个是\(i\),进行转移 要先预处理出两点间的点,然后卡卡常就可以过了 # ...
- [Luogu] P4460 [CQOI2018]解锁屏幕
题目背景 使用过Android 手机的同学一定对手势解锁屏幕不陌生.Android 的解锁屏幕由3X3 个点组成,手指在屏幕上画一条线,将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: ...
- P4460 [CQOI2018]解锁屏幕
算是我比较擅长的类型,自己想想就会了.普通小状压,状态傻子都能想出来.一开始裸的枚举T了,30.后来与处理之后跑的飞起,就是不对,还是30分.后来看讨论版...mod竟然是1e8+7!!!这不有毒吗. ...
- [CQOI2018]解锁屏幕
嘟嘟嘟 这题感觉真的很简单-- \(O(n ^ 2 logn)\)的做法特别好理解,但得开O2. 看数据范围,肯定是状压dp.但刚开始我没想通状压啥,因为点与点之间还有顺序问题.但后来发现这个顺序是子 ...
- 【[CQOI2018]解锁屏幕】
状压这个东西好像没有什么能优化的高级东西,像什么斜率优化,单调队列在状压的优化上都很少见 而最常见的状压优化就是预处理优化了, 这道题就预处理一下所有点对之间连线上的点,之后压成状态就能做到\(O(2 ...
- BZOJ 5299: [Cqoi2018]解锁屏幕
状压DP #include<cstdio> using namespace std; const int mod=1e8+7; int F[1000005][25],dis[25][25] ...
- bzoj 5299: [Cqoi2018]解锁屏幕 状压dp+二进制
比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: ...
- 【BZOJ5299】【CQOI2018】解锁屏幕(动态规划,状态压缩)
[BZOJ5299][CQOI2018]解锁屏幕(动态规划,状态压缩) 题面 BZOJ 洛谷 Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由 ...
随机推荐
- 51nod1149 Pi的递推式
基准时间限制:1 秒 空间限制:131072 KB 分值: 640 F(x) = 1 (0 <= x < 4) F(x) = F(x - 1) + F(x - pi) (4 <= x ...
- 使用infinite-scroll实现Ghost博文列表的滚动加载
Ghost博客系统默认提供的博文列表为传统的翻页方式(通过点击上一页.下一页等按钮来切换),随着移动客户端的发展,瀑布流式的滚动加载方式得到广泛应用,有效地提高了用户浏览信息的流畅度.下面详述如何通过 ...
- 设计模式之Adapter
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: 将两个不兼容的类纠合在一起使用,属于结构型模式,也有人称它为wrapper(包装类). 包装类 ...
- 【Explain】mysql之explain详解(分析索引的最佳使用)
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain 这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句 ...
- 初窥ThinkPHP
MVC全称(Model View Controller) Model:模型(可以理解位数据库操作模型) View:视图(视图显示) Controller:(控制器) 简单的说框架就是一个类的集合.集合 ...
- caffe Python API 之中值转换
# 编写一个函数,将二进制的均值转换为python的均值 def convert_mean(binMean,npyMean): blob = caffe.proto.caffe_pb2.BlobPro ...
- Qt跨线程调用错误解析及解决办法
错误提示:Error: Cannot create children for a parent that is in a different thread. 错误案例分析 新建SerialLink子线 ...
- Groovy 与 DSL
一:DSL 概念 指的是用于一个特定领域的语言(功能领域.业务领域).在这个给出的概念中有 3个重点: 只用于一个特定领域,而非所有通用领域,比如 Java / C++就是用于通用领域,而不可被称为 ...
- Spring如何解析Dubbo标签
1. 要了解Dubbo是如何解析标签的,首先要清楚一点就是Spring如何处理自定义标签的,因为Dubbo的标签可以算是Spring自定义标签的一种情况: 2. Spring通过两个接口来解析自定义的 ...
- 交通运输线(LCA)
题目大意: 战后有很多城市被严重破坏,我们需要重建城市.然而,有些建设材料只能在某些地方产生.因此,我们必须通过城市交通,来运送这些材料的城市.由于大部分道路已经在战争期间完全遭到破坏,可能有两个城市 ...