题目描述







题解

八级sb题

显然可以想到状压

枚举当前的宽度\(I\),设\(f[s]\)表示在当前的宽度下选的竖边的状态为s

再设\(g[s1][s2]\)表示状态s1转移到s2的方案数,枚举中间横边的集合s3

显然一个合法的方案中不能存在四边都是边的方格,即\(s1\&s2\&(s3+2^{I-1})\&((s3<<1)+1)\)

如果第i个格子存在四边,那么只能是\(s1\)的第\(i-1\)位(即\(2^{i-1}\))、\(s2\)的第\(i-1\)位、\(s3\)的第\(i-2\)位和第\(i-1\)位都存在,于是就有了上面的式子

dp随便转移,然而这样会挂(

矩乘加速即可

code

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define mod 1000000007
using namespace std; int p[8]={0,1,2,4,8,16,32,64};
int w[8];
long long f[2][128];
long long a[128][128];
long long b[128][128];
long long c[128][128];
int i,j,k,l,I,L,i2,i3; int main()
{
// freopen("51nod1730.in","r",stdin);
// freopen("51nod1730.out","w",stdout); fo(i,1,7)
scanf("%d",&w[i]); i2=0;
f[0][0]=1; fo(I,1,7)
{
i3=i2^1;
memset(f[i3],0,sizeof(f[i3])); L=p[I]*2-1;
fo(i,0,p[I]-1)
f[i3][i|p[I]]=f[i2][i];
i2=i3; memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
fo(i,0,L)
{
fo(j,0,L)
{
fo(k,0,p[I]-1)
if (!(i&j&((k<<1)+1)&(k+p[I])))
++b[i][j];
}
}
fo(i,0,L)
a[i][i]=1; while (w[I])
{
if (w[I]&1)
{
memset(c,0,sizeof(c));
fo(i,0,L)
{
fo(j,0,L)
{
fo(k,0,L)
c[i][j]=(c[i][j]+a[i][k]*b[k][j])%mod;
}
}
fo(i,0,L)
{
fo(j,0,L)
a[i][j]=c[i][j];
}
} memset(c,0,sizeof(c));
fo(i,0,L)
{
fo(j,0,L)
{
fo(k,0,L)
c[i][j]=(c[i][j]+b[i][k]*b[k][j])%mod;
}
}
fo(i,0,L)
{
fo(j,0,L)
b[i][j]=c[i][j];
} w[I]>>=1;
} i3=i2^1;
memset(f[i3],0,sizeof(f[i3])); fo(j,0,L)
{
fo(k,0,L)
f[i3][j]=(f[i3][j]+f[i2][k]*a[k][j])%mod;
}
i2=i3;
} printf("%lld\n",f[i2][p[7]*2-1]); fclose(stdin);
fclose(stdout); return 0;
}

51nod1730 涂边的更多相关文章

  1. 洛谷P3392 涂国旗

    P3392 涂国旗 107通过 507提交 题目提供者kkksc03 标签 难度普及- 提交  讨论  题解 最新讨论 直接读字符会wa WA?-- 为什么不对... 跪求找错 快点给钱 这不就是荷兰 ...

  2. 1260: [CQOI2007]涂色paint

    Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...

  3. 洛谷⑨月月赛Round2 P3392涂国旗[DP]

    题目描述 某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的国旗.(毛熊:阿嚏——) 从最上方若干行(>=1)的格子全部是白色的. 接下来若干行(>=1)的格子全部是 ...

  4. 【BZOJ-1260】涂色paint 区间DP

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 1147  Solved: 698[Submit][Sta ...

  5. LYDSY模拟赛day3 涂色游戏

    /* 非常好的题 */ #include <cstdio> #include <iostream> #include <cstdlib> #include < ...

  6. 并查集(涂色问题) HDOJ 4056 Draw a Mess

    题目传送门 题意:给出一个200 * 50000的像素点矩阵,执行50000次操作,每次把一个矩形/圆形/菱形/三角形内的像素点涂成指定颜色,问最后每种颜色的数量. 分析:乍一看,很像用线段树成段更新 ...

  7. hdu 4559 涂色游戏(对SG函数的深入理解,推导打SG表)

    提议分析: 1 <= N <= 4747 很明显应该不会有规律的,打表发现真没有 按题意应该分成两种情况考虑,然后求其异或(SG函数性质) (1)找出单独的一个(一列中只有一个) (2)找 ...

  8. 【DP】BZOJ 1260: [CQOI2007]涂色paint

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 893  Solved: 540[Submit][Stat ...

  9. BZOJ2375: 疯狂的涂色

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2375 小t非常喜爱画画,但是他还是一个初学者.他最近费尽千辛万苦才拜到已仙逝的达 芬奇为师(神 ...

随机推荐

  1. Java多线程学习——图片下载

    实现多线程方式1:继承类Thread——重写方法run——调用方法start 从网络下载图片首先要增加包commons-io.jar import org.apache.commons.io.File ...

  2. clearfix:after 的用法

    想要清除浮动就要在父元素上 加上 clearfix:after .clearfix:after { <----在类名为“clearfix”的元素内最后面加入内容: content: " ...

  3. P1118 [USACO06FEB]数字三角形`Backward Digit Su`… (dfs)

    https://www.luogu.org/problemnew/show/P1118 看的出来是个dfs 本来打算直接从下到上一顿搜索 但是不会 看了题解才知道系数是个杨辉三角....... 这样就 ...

  4. strtoul()要优于atoi()函数---C语言

    strtoul():将字符串转为长整型整数 atoi():将字符串转为整型整数 在32位STM32中,int是32位的,如果字符串是“3123456789”,大于0x7fff fff,用atoi()函 ...

  5. 题解 AT1877 【回文分割】

    题意:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入:aab 输出:3 解释:aba 思路: 记录字符串中每个字符出现的次数si 如果 ...

  6. while与格式化的练习

    练习 判断下列逻辑语句的结果,一定要自己先分析 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 2)n ...

  7. tensorflow学习笔记六----------神经网络

    使用mnist数据集进行神经网络的构建 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from ...

  8. DataTable中如何去除重复的项 (获得某个字段中的不重复项)

    就是获取DataTable中某一列的值,因为从数据库中检索数据时,按照2个字段进行分组,而要获得的那一列刚好在分组这两列中,所以该列的值必然有重复,于是就想到了去除重复,有了思路以后在网上看了一些方法 ...

  9. mysql proxysql的简单部署读写分离

    环境需求(centos) proxysql-server(1)-- 地址:proxysql-service mysql-master-server(1)--- 地址:mysql1-service my ...

  10. arcgis server10.2自带打印模板路径

    找到arcgis server10.2安装目录路径,我的安装路径为C盘,如下: C:\Program Files\ArcGIS\Server\Templates\ExportWebMapTemplat ...