[Luogu] P4460 [CQOI2018]解锁屏幕】的更多相关文章

题目背景 使用过Android 手机的同学一定对手势解锁屏幕不陌生.Android 的解锁屏幕由3X3 个点组成,手指在屏幕上画一条线,将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: 题目描述 画线时还需要遵循一些规则: 连接的点数不能少于4 个.也就是说只连接两个点或者三个点会提示错误. 两个点之间的连线不能弯曲. 每个点只能“使用”一次,不可重复.这里的“使用”是指手指划过一个点,该点变绿. 两个点之间的连线不能“跨过”另一个点,除非那个点之前已经被“使用”过了. 对于最后…
算是我比较擅长的类型,自己想想就会了.普通小状压,状态傻子都能想出来.一开始裸的枚举T了,30.后来与处理之后跑的飞起,就是不对,还是30分.后来看讨论版...mod竟然是1e8+7!!!这不有毒吗... 题干: 题目背景 使用过Android 手机的同学一定对手势解锁屏幕不陌生.Android 的解锁屏幕由3X3 个点组成,手指在屏幕上画一条线,将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: 题目描述 画线时还需要遵循一些规则: 连接的点数不能少于4 个.也就是说只连接两个点…
题目链接 bzoj 5299: [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…
Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由3x3个点组成,手指在屏幕上画一条 线将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: 画线时还需要遵循一些规则 1.连接的点数不能少于4个.也就是说只连接两个点或者三个点会提示错误. 2.两个点之间的连线不能弯曲. 3.每个点只能"使用"一次,不可重复.这里的"使用"是指手指划过一个点,该点变绿. 4.两个点之间的连线不能"跨过&qu…
嘟嘟嘟 这题感觉真的很简单-- \(O(n ^ 2 logn)\)的做法特别好理解,但得开O2. 看数据范围,肯定是状压dp.但刚开始我没想通状压啥,因为点与点之间还有顺序问题.但后来发现这个顺序是子问题,转移的时候只用记录最后一个点. 所以dp[i][j]表示选的点集为\(i\),最后一个点为\(j\)的时的答案.转移的时候再枚举一个不在\(i\)中的\(k\),如果\(j\)和\(k\)之间的点都被选了,就可以转移. 如果每次暴力判断能否转移,就达到了\(O(n ^ 3 logn)\).所以…
状压这个东西好像没有什么能优化的高级东西,像什么斜率优化,单调队列在状压的优化上都很少见 而最常见的状压优化就是预处理优化了, 这道题就预处理一下所有点对之间连线上的点,之后压成状态就能做到\(O(2^n*n^2)\) 这道题的状态就非常简单了,就是一个小学生状压\(dp[i][S]\)状态为\(S\)时最后一个点是\(i\)的方案数 代码 #include<iostream> #include<cstring> #include<cstdio> #define min…
题目链接 BZOJ5299 题解 就一个毒瘤卡常题..写了那么久 设\(f[i][s]\)表示选了集合\(s\)中的点,最后一个是\(i\),进行转移 要先预处理出两点间的点,然后卡卡常就可以过了 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #include<ma…
状压DP #include<cstdio> using namespace std; const int mod=1e8+7; int F[1000005][25],dis[25][25],lim[1000005]; struct node{ int x,y; }E[25]; int main(){ int n; scanf("%d",&n); for (int i=0; i<n; i++) scanf("%d%d",&E[i].x…
比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: #include <bits/stdc++.h> #define N 21 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; const…
[BZOJ5299][CQOI2018]解锁屏幕(动态规划,状态压缩) 题面 BZOJ 洛谷 Description 使用过Android手机的同学一定对手势解锁屏幕不陌生.Android的解锁屏幕由3x3个点组成,手指在屏幕上画一条 线将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: 画线时还需要遵循一些规则 1.连接的点数不能少于4个.也就是说只连接两个点或者三个点会提示错误. 2.两个点之间的连线不能弯曲. 3.每个点只能"使用"一次,不可重复.这里的"…