题意:n × n的矩阵,每个位置可以被染成黑/白色。

一种gay的染色是任意相邻两行的元素,每两个要么都相同,要么都不同。列同理。

一种gaygay的染色是一种gay的染色,其中没有哪个颜色的子矩阵大小大于等于k。

求有多少种gaygay的染色。

解:首先手玩这个gay的染色到底是什么情况。

然后发现,每种gay的染色都一一对应一种只有第一行第一列的染色。换句话说,决定了第一行第一列,就可以得到唯一一种gay的染色,并且每种gay的染色都可以用这种方式得到。

然后考虑gaygay的染色,显然,找出第一行最长连续段和第一列最长连续段。这两者的长度乘积 < k即可。

又由于第一行和第一列有一个公共元素,而黑白又是轮换对称的,所以把第一个格子固定为黑色,最后×2即可。

DP求出一行的最长连续段恰好为k时方案数。然后前缀和就是最长连续段小于等于k的方案数了。

枚举第一行的最长连续段,可以得到一个第一列最长连续段的限制。方案数乘起来就行了。

注意这个限制要对n取min。

DP这个环节,具体来说,f[i][j][1/0]表示前i个,最大连续段为j,当前有没有长度为j的连续段的方案数。刷表法转移,枚举当前放长为多少的连续段即可。复杂度n3

 #include <cstdio>
#include <algorithm> const int N = , MO = ; int f[N][N][], sum[N]; inline void add(int &a, const int &b) {
a = (a + b) % MO;
return;
} int main() {
int n, k;
scanf("%d%d", &n, &k);
for(int j = ; j <= n; j++) {
f[][j][] = ;
}
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
// f[i][j][0/1]
for(int k = ; k < j && i + k <= n; k++) {
add(f[i + k][j][], f[i][j][]);
add(f[i + k][j][], f[i][j][]);
}
if(i + j <= n) {
add(f[i + j][j][], f[i][j][]);
add(f[i + j][j][], f[i][j][]);
}
}
}
// f[n][i][1]
for(int i = ; i <= n; i++) {
sum[i] = (f[n][i][] + sum[i - ]) % MO;
} int ans = ;
for(int i = ; i <= n; i++) {
int t = std::min(n, (k - ) / i);
add(ans, 1ll * f[n][i][] * sum[t] % MO);
} printf("%d", ans * % MO);
return ;
}

AC代码

CF1027E Inverse Coloring的更多相关文章

  1. codeforces 1027 E. Inverse coloring (DP)

    E. Inverse Coloring time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. Codeforces 1027E Inverse Coloring 【DP】

    Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...

  3. 【CF1027E】Inverse Coloring(DP)

    题意:给出一个n*n的矩阵,要求在每个位置涂上黑/白色, 要求满足:任意相邻的两行,其颜色要么完全相同,要么完全相反 任意相邻的两列,其颜色也要么相同要么完全相反 且这个矩形中,不存在任意一个大小大于 ...

  4. CF 1027E Inverse Coloring

    当天晚上并没有看懂题意,然后就刚了40分钟F,但是没有弄出来呜呜呜. 推荐博客:  https://blog.csdn.net/Dream_maker_yk/article/details/81840 ...

  5. codeforces 1027E. Inverse Coloring(计数)

    一开始发现的性质是确定了第一行后,后面的行只需要考虑和前面的行相同或者不同,整个过程只需要考虑行,构出的图一定符合性质(即同样满足列的性质),但是接下来死活定义不出状态,事实证明自己还是想的太少了 思 ...

  6. Educational Codeforces Round 49 (Rated for Div. 2)

    题目链接 还缺F和G,至少上橙之后把F补了吧. A - Palindromic Twist 题意:每个字母恰好操作一次,变成其之前或者其之后的一个字母,注意'a'和'z'不互通,求是否可以变成回文串. ...

  7. Codeforces Edu Round 49 A-E

    A. Palindromic Twist 由于必须改变.所以要使\(a[i] = a[n - i + 1]\). 要么同向走,但必须满足之前的\(a[i] = a[n - i + 1]\). 要么相遇 ...

  8. 【POJ】1419:Graph Coloring【普通图最大点独立集】【最大团】

    Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5775   Accepted: 2678   ...

  9. 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题

    解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题http ...

随机推荐

  1. VB 批量重命名文件

    VERSION 5.00 Begin VB.Form Form1 BorderStyle = 3 'Fixed Dialog Caption = "Rename use VB QQ 1009 ...

  2. [Python]-pip-ReadTimeoutError: Read timed out 问题

    问题描述 就是在安装Python包的时候,由于时间太长引起的超时问题 问题解决 第一个办法是更改源地址:在 ~/.pip/ 下创建文件 pip.conf(如果还没有的话), 模版如下: [global ...

  3. 1、JVM 内存模型+运行时数据区+JVM参数

    JMM(内存模型)  1.’主内存+每个线程有自己的内存 JVM运行时数据区 包含:1.程序计算器(每个线程自带):2.JAVA-STACK(每个线程自带):3.本地方法stack:4.堆:5.方法区 ...

  4. JS计算混合字符串长度

    用的是正则表达式 var str = ”坦克是tank的音译”; var len = str.match(/[^ -~]/g) == null ? str.length : str.length +  ...

  5. mysql基础(二)—— 简单sql

    查询 select * from company select c.code from company c; select m.bookname from myview m; (myview为视图) ...

  6. Easy Pipeline,一种轻量级的Python Pipeline库

    嗯,很久没有写博客了,最近的工作都是偏开发性质的,以至于没有时间对自己感兴趣的领域进行探索,感觉个人的成长停滞了一些.如何在枯燥的工作中,提取出有助于自己成长的养分,对于每个人来说都是不小的考验. 这 ...

  7. linux centos 中Tomcat的安装和自启动配置

    Tomcat的安装和自启动配置将tomcat添加为linux系统服务,网上找到了很多方法,其中比较简单的如下:方法一:(亲测有效)1. 首先需要将$Tomcat_HOME/bin目录下的catalin ...

  8. 35道Redis面试题

    1.什么是redis?   Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数 ...

  9. LeetCode-97.交错字符串

    给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbbca&quo ...

  10. Nodejs如何把接收图片base64格式保存为文件存储到服务器上

    app.post('/upload', function(req, res){ //接收前台POST过来的base64 var imgData = req.body.imgData; //过滤data ...