[CQOI2018] 解锁屏幕(状压dp)

problem

luogu-P4460

solution

题面以及数据告诉我们显然是状压 dpdpdp

f(s,i):f(s,i):f(s,i): 经过的点集 sss 最后一次画的点为 iii 的方案数。

直接枚举下一个之前没被画的点 jjj 转移即可。

f(s∣2j,j)←f(s,i)f(s|2^j,j)\leftarrow f(s,i)f(s2j,j)f(s,i)

但这里需要保证 i,ji,ji,j 两点间若存在点,必须这些点之前都被画过了。

我们预处理,开个 bitset\text{bitset}bitsetg(i,j):g(i,j):g(i,j):i,ji,ji,j 贡献且在 i,ji,ji,j 线段上的点集。

共线判断我们常用的是斜率,即 yk−yixk−xi=yk−yjxk−xj\frac{y_k-y_i}{x_k-x_i}=\frac{y_k-y_j}{x_k-x_j}xkxiykyi=xkxjykyj

但计算机 /0/0/0 是会 RE\text{RE}RE 的,所以我们尽量避免处罚,交叉相乘判断相等即可。

共线只是一个条件,必须是在 i,ji,ji,j 形成的线段上,所以和 i,ji,ji,j 的横纵坐标判断一下即可。

最后的最后,就是这道题可以不用完所有点

条件只说了画的点数不小于 444 即可。

code

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 100000007
#define maxn 20
bitset < maxn > g[maxn][maxn];
int n, ans;
int X[maxn], Y[maxn], f[1 << maxn][maxn];bool check( int l, int r, int i ) {if( (X[i] - X[l]) * (Y[i] - Y[r]) != (X[i] - X[r]) * (Y[i] - Y[l]) )return 0;if( (X[i] >= max(X[l], X[r]) or X[i] <= min(X[l], X[r])) and (Y[i] >= max(Y[l], Y[r]) or Y[i] <= min(Y[l], Y[r])) ) return 0;return 1;
}signed main() {scanf( "%lld", &n );for( int i = 0;i < n;i ++ ) scanf( "%lld %lld", &X[i], &Y[i] );if( n < 4 ) return ! puts("0");for( int i = 0;i < n;i ++ )for( int j = 0;j < n;j ++ )for( int k = 0;k < n;k ++ )if( i == j or i == k or j == k ) continue;else if( check( i, j, k ) ) g[i][j][k] = 1;for( int i = 0;i < n;i ++ ) f[1 << i][i] = 1;for( int s = 0;s < (1 << n);s ++ ) {for( int i = 0;i < n;i ++ )if( f[s][i] )for( int j = 0;j < n;j ++ )if( s >> j & 1 ) continue;else {for( int k = g[i][j]._Find_first();k != g[i][j].size();k = g[i][j]._Find_next( k ) )if( ! (s >> k & 1) ) goto pass;(f[s | (1 << j)][j] += f[s][i]) %= mod;pass:;}}int ans = 0;for( int s = 0;s < (1 << n);s ++ )if( __builtin_popcount( s ) >= 4 )for( int i = 0;i < n;i ++ )(ans += f[s][i]) %= mod;printf( "%lld\n", ans );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#并行编程(6):线程同步面面观

理解线程同步线程的数据访问在并行&#xff08;多线程&#xff09;环境中&#xff0c;不可避免地会存在多个线程同时访问某个数据的情况。多个线程对共享数据的访问有下面3种情形&#xff1a;多个线程同时读取数据&#xff1b;单个线程更新数据&#xff0c;此时其他线程读取数据…

P2522 [HAOI2011]Problem b

P2522 [HAOI2011]Problem b 题意&#xff1a; 对于给出的 n 个询问&#xff0c;每次求有多少个数对 (x,y)&#xff0c;满足 a≤x≤b&#xff0c;c≤y≤d&#xff0c;且 gcd(x,y)k&#xff0c;gcd(x,y) 函数为 x 和 y 的最大公约数。 题解&#xff1a; 这个题跟P3455 [POI20…

[十二省联考 2019] 异或粽子(可持久化字典树 + 二叉堆)

problem luogu-P5283 小粽是一个喜欢吃粽子的好孩子。今天她在家里自己做起了粽子。 小粽面前有 nnn 种互不相同的粽子馅儿&#xff0c;小粽将它们摆放为了一排&#xff0c;并从左至右编号为 111 到 nnn。 第 iii 种馅儿具有一个非负整数的属性值 aia_iai​。 每种馅儿的数…

.NET Core/Framework 创建委托以大幅度提高反射调用的性能

都知道反射伤性能&#xff0c;但不得不反射的时候又怎么办呢&#xff1f;当真的被问题逼迫的时候还是能找到解决办法的。为反射得到的方法创建一个委托&#xff0c;此后调用此委托将能够提高近乎直接调用方法本身的性能。&#xff08;当然 Emit 也能够帮助我们显著提升性能&…

[省选联考 2020 A/B 卷] 冰火战士(树状数组上二分)

文章目录problemsolution(10pts)code(10pts)solution(30pts)code(30pts)solution(60pts)code(60pts)solution(100pts)code(100pts)problem luogu-P6619 一场比赛即将开始。 每位战士有两个属性&#xff1a;温度和能量。 有两派战士&#xff1a; 冰系战士的技能会对周围造成…

P1829 [国家集训队]Crash的数字表格 / JZPTAB

P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意&#xff1a; 求∑i1n∑j1mlcm(i,j)\sum_{i1}^{n}\sum_{j1}^{m}lcm(i,j)∑i1n​∑j1m​lcm(i,j) 1<n<m<1e7 结果mod20101009 题解&#xff1a; 跟这个题P3911 最小公倍数之和很相近&#xff0c;但是本题数据范围大…

C# 跨设备前后端开发探索

每个人都拥有 好奇心&#xff0c;好奇心驱使着我们总是去尝试做一些有趣的事情。带起你的好奇心&#xff0c;本文将使用 C# 开发各种各样好玩的东西。每个人都拥有 好奇心&#xff0c;好奇心驱使着我们总是去尝试做一些有趣的事情。比如这件事&#xff1a;在好奇心的驱使下&…

Docker最全教程之Python爬网实战(二十二)

Python目前是流行度增长最快的主流编程语言&#xff0c;也是第二大最受开发者喜爱的语言&#xff08;参考Stack Overflow 2019开发者调查报告发布&#xff09;。笔者建议.NET、Java开发人员可以将Python发展为第二语言&#xff0c;一方面Python在某些领域确实非常犀利&#xff…

P2870 [USACO07DEC]Best Cow Line G

P2870 [USACO07DEC]Best Cow Line G 题意&#xff1a; 给你一个字符串&#xff0c;每次从首或尾取一个字符组成字符串&#xff0c;问所有能够组成的字符串中字典序最小的一个。 题解&#xff1a; 现在要组成字典序最小的&#xff0c;那我们每次就尽可能取小的 我们从两端开…

[APIO2014] 序列分割(斜率优化dp)

problem luogu-P3648 你正在玩一个关于长度为 nnn 的非负整数序列的游戏。这个游戏中你需要把序列分成 k1k1k1 个非空的块。 为了得到 k1k1k1 块&#xff0c;你需要重复下面的操作 kkk 次&#xff1a; 选择一个有超过一个元素的块&#xff08;初始时你只有一块&#xff0c;…

中间件是什么?在.NET Core中的工作原理又是怎样的呢?

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core appsettings.json文件ASP.NET Core 中的中间件(Middleware)在这个视频中&#xff0c;我们将了解&#xff0c;ASP.NET Core 中的中间件是 什么&#xff1f;中间件很重要&#xff0c;尤其是在你想当架构…

P2408 不同子串个数

P2408 不同子串个数 题意&#xff1a; 给你一个长为 n 的字符串&#xff0c;求不同的子串的个数。 我们定义两个子串不同&#xff0c;当且仅当有这两个子串长度不一样或者长度一样且有任意一位不一样。 子串的定义&#xff1a;原字符串中连续的一段字符组成的字符串。 题解…

[SDOI2016] 生成魔咒(后缀数组SA + st表 + set)动态不同子串个数

problem luogu-P4070 魔咒串由许多魔咒字符组成&#xff0c;魔咒字符可以用数字表示。例如可以将魔咒字符 1,21,21,2 拼凑起来形成一个魔咒串 [1,2][1,2][1,2]。 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒。 例如 S[1,2,1]S[1,2,1]S[1,2,1] 时&#xff0c;它的生成…

P4248 [AHOI2013]差异

P4248 [AHOI2013]差异 题意&#xff1a; ∑1≤i<j≤nlen(Ti)len(Tj)−2∗lcp(Ti,Tj)\sum_{1\leq i<j\leq n}len(T_{i})len(T_{j})-2*lcp(T_{i},T_{j})∑1≤i<j≤n​len(Ti​)len(Tj​)−2∗lcp(Ti​,Tj​) 题解&#xff1a; ∑1≤i<j≤nlen(Ti)len(Tj)\sum_{1\le…

从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行

本文描述的是对国家统计局于2019-01-31发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》中省市区三级的坐标和行政区域边界的采集。本文更新&#xff08;移步查阅&#xff09;&#xff1a;19-04-15 新采集了2018的省市区三级的坐标和行政区域边界数据csv格式…

[JSOI2016] 最佳团体(0/1分数规划 + 树形dp)

problem luogu-P4322 solution 假设每个人是否被招募&#xff0c;用 xi{0,1}x_i\{0,1\}xi​{0,1} 代替&#xff0c;max⁡∑pi∗xi∑si∗xi\max\frac{\sum p_i*x_i}{\sum s_i*x_i}max∑si​∗xi​∑pi​∗xi​​。 0/10/10/1 分数规划标准式子。 二分答案 ans∑pi∗xi∑si∗…

Display Substring

Display Substring 题意&#xff1a; 一个长度为n的字符串&#xff0c;每个字符有自己的价值&#xff0c;求第k小价值的不重复子串价值 题解&#xff1a; 首先众所周知&#xff0c;所有子串都可以用后缀的前缀来表示&#xff0c;这就和后缀数组扯上关系了 我们可以直接二分…

使用 DotNet CLI 创建自定义的 WPF 项目模板

描述当我们安装完 DotNetCore 3.0 版本的 SDK 后&#xff0c;我们就可以创建基于 DotNetCore 的 WPF 项目模板&#xff0c;通过如下 CLI 可以方便快捷的创建并运行我们的项目&#xff1a;Copydotnet new wpf -n WpfAppcd WpfAppdotnet restoredotnet run做过 WPF 开发的朋友都知…

[省选联考 2020 A/B 卷] 信号传递(状压dp + 卡空间)

problem luogu-P6622 一条道路上从左至右排列着 mmm 个信号站&#xff0c;初始时从左至右依次编号为 1,2,…,m1,2,\dots,m1,2,…,m&#xff0c;相邻信号站之间相隔 111 单位长度。 每个信号站只能往它右侧的任意信号站传输信号&#xff08;称为普通传递&#xff09;&#xf…

SP687 REPEATS - Repeats(暂时不会)

SP687 REPEATS - Repeats 题意&#xff1a; 给定字符串&#xff0c;求重复次数最多的连续重复子串 题解&#xff1a; 论文题&#xff0c;暂时不会&#xff0c;搞不清楚原理 代码&#xff1a;