
状压DP
状压DP能够大幅度降低空间复杂度与时间复杂度,十分重要
ssl_lhj
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SSL 1382 车
思路 Code #include<iostream> #include<cstdio> using namespace std; long long n,m,p[21]={1},a[21],f[1<<20]={1}; int main(){ ios::sync_with_stdio(false); cin>>n>>m; for(long long i=1;i<=20;i++) p[i]=p[i-1]*2; for(long long原创 2021-06-12 16:51:50 · 76 阅读 · 0 评论 -
洛谷 P1879 [USACO06NOV]Corn Fields G
洛谷 P1879 [USACO06NOV]Corn Fields G 原题链接 思路 就是状压dp,这里说一下递推式; 用d[i][j]表示前i行中状态为j时的合法方案数,k表示上一行的状态,递推式为 d[i][j]=d[i][j]+d[i-1][k]; i-1表示上一行,k表示上一行的状态,上一行与当前行相加,就是当前行的方案数; Code #include<iostream> #include<cstdio> #define mod 100000000 using namespa原创 2021-05-05 08:12:31 · 631 阅读 · 1 评论 -
洛谷 P2622 关灯问题II
洛谷 P2622 关灯问题II 原题链接 (1<<n)-1与1<<(n-1)到底是什么?? 首先弄清楚<<是什么运算: 假如01010是一个二进制数,那么:01010<<1=10100;其中,01010是被操作数,1是参数,表示把01010整个数向左平移1位; 弄清楚这个后,就好解释了: 把n代一个值如n=5; 那么(1<<n)-1=(1<<5)-1=100000=011111=11111;表示n盏灯全开; 而1<<(n-1原创 2021-05-04 21:27:46 · 114 阅读 · 0 评论 -
洛谷 P1433 吃奶酪
洛谷 P1433 吃奶酪 题目链接 思路 状压dp 见代码注释 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; double x[20],y[20],a[20][20],f[20][1<<16],ans; int n; double dis(int a,int b){return sqrt((x[a]-x[b])*(原创 2021-05-04 19:49:12 · 128 阅读 · 0 评论 -
SSL 1384 炮兵阵地
SSL 1384 炮兵阵地 题目链接 思路 1、输入,顺便用二进制在mp中标记状态,直接右移一位就是标记为0,移完之后再加1就是标记1; 2、通过for筛选出符合题目条件的一行中的所有符合条件的状态; 3、DP求出结果 #include<iostream> #include<cstdio> using namespace std; int n,m,tot,ans,mp[1010],a[1<<10],num[1<<10],f[110][1<<10][原创 2021-05-04 15:58:40 · 98 阅读 · 0 评论 -
SSL 1382 车
SSL 1382 车【状态压缩】 pi表示一个第i位为1,其余为0的二进制数 即p1=1,p2=10,p3=100,p4=1000(以上数字均为二进制数) ar表示第r行不允许放置的情况,如果第r行某一位不允许放置则ar此位为0,否则为1. (x&-x)是lowbit公式即求二进制下最后一个1. 一定要开long long #include<iostream> #include<cstdio> using namespace std; long long n,m,p[21]=原创 2021-05-03 21:17:10 · 146 阅读 · 0 评论