题目

有一个 \(n\) 行 \(m\) 列的格点图,你需要给每个点上染上 \(k\) 种颜色中的一种,

要求没有两个相邻点颜色相同。给定第一行与最后一行的染色,试求总染色方案数。


分析

首先对于 \(k=2\) 要特判,因为存在 \(m\) 特别大的情况,

否则可以将每种颜色压成二位二进制,直接状压会TLE,

设 \(dp[n][m][S]\) 表示处理到 \((n,m)\) 轮廓线颜色状态为 \(S\)的方案数,

还是分第一个格子和其它格子判断,注意 \(k=3\) 时颜色 3 不能选择。


代码

#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
const int N=65536,mod=376544743; bool bbc[N<<1];
int n,m,k,two[16],f[N],dp[N],al,S;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
signed main(){
n=iut(),m=iut(),k=iut();
if (k==2){
for (rr int i=0;i<m;++i) bbc[i]=iut();
for (rr int i=0;i<m;++i)
if (bbc[i]^iut()^(n&1)^1) return !putchar(48);
return !putchar(49);
}
two[0]=1;
for (rr int i=1;i<2*m;++i)
two[i]=two[i-1]<<1;
for (rr int i=0;i<m;++i){
rr int x=iut();
if (x&1) S|=two[i<<1];
if (x&2) S|=two[i<<1|1];
}
dp[S]=1,al=1<<(m*2);
for (rr int i=1;i<n;++i){
memset(f,0,sizeof(int)*al);
for (rr int j=0;j<al;++j){
if ((j&3)==3&&k==3) continue;
for (rr int t=0;t<k;++t)
if ((j&3)!=t)
f[j]=mo(f[j],dp[j^(j&3)^t]);
}
memcpy(dp,f,sizeof(int)*al);
for (rr int o=1;o<m;++o){
memset(f,0,sizeof(int)*al);
for (rr int j=0;j<al;++j){
rr int F=j&(two[o*2-2]|two[o*2-1]);
rr int now=j&(two[o<<1]|two[o<<1|1]);
if (now==F*4) continue;
if (now==(two[o<<1]|two[o<<1|1])&&k==3) continue;
for (rr int t=0;t<k;++t)
if (now!=t*two[o<<1])
f[j]=mo(f[j],dp[j^now^(t*two[o<<1])]);
}
memcpy(dp,f,sizeof(int)*al);
}
}
S=0;
for (rr int i=0;i<m;++i){
rr int x=iut();
if (x&1) S|=two[i<<1];
if (x&2) S|=two[i<<1|1];
}
return !printf("%d",dp[S]);
}

#轮廓线dp#洛谷 2435 染色的更多相关文章

  1. 树形DP 洛谷P2014 选课

    洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...

  2. 洛谷——P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...

  3. 洛谷 P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...

  4. 区间DP 洛谷P2858牛奶零食

    题目链接 题意:你有n个货物从1-n依次排列,每天可以从两侧选一个出来卖,卖的价格是当天的天数乘该货物的初始价格,问这批货物卖完的最大价格 输入:第一行n,之后是n个货物的初始价值 这道题不能用贪心做 ...

  5. P1279 字串距离 dp 洛谷

    题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...

  6. dp 洛谷P1977 出租车拼车 线性dp

    题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...

  7. 洛谷P2486 染色

    LCT的一种姿势. 题意:给定一棵树.每次把一条路径上的点染成一种颜色,求一条路径上有多少段颜色. 解: 首先可以很轻易的用树剖解决,只不过代码量让人望而却步... 有一种难以想象的LCT做法... ...

  8. 经典DP 洛谷p1880 石子合并

    https://www.luogu.org/problemnew/show/P1880 题目 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新 ...

  9. [DP]洛谷P1115最大子段和

    题目来源 https://www.luogu.org/problemnew/show/P1115 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一 ...

  10. 尼克的任务 dp 洛谷1280

    蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...

随机推荐

  1. 【Android 逆向】【攻防世界】黑客精神

    1. apk 安装到手机,提示输入注册码 2. jadx打开apk MainActivity.java @Override // android.app.Activity public void on ...

  2. 这样优化,0.059s 启动一个SpringBoot项目

    https://mp.weixin.qq.com/s/2_tQO7Z6GfmC6y73jc6ITQ

  3. Javascript之Object、Array

    Object.keys 对象的键转化为数组 Object.values 对象的属性值转化为数组 Object.assign 对象的合并   Array.from() 伪数组对象的属性值转化为数组.类似 ...

  4. 【Azure 媒体服务】使用编码预设文件(Preset.json)来自定义编码任务 -- 创建视频缩略图

    问题描述 在Azure门户上创建Transform Encoding时候,只能选择 Built-in Preset 编码方式(如:H265ContentAwareEncoding) 在创建编码任务时, ...

  5. 【Azure Developer】在微软云中国区,如何使用Microsoft GraphAPI连接到B2C Tenant

    问题描述 如题所述,当在中国区使用Microsoft GraphAPI连接B2C Tenant时候,如何来设置中国区的Endpoint呢?在GitHub的示例中,并没有示例介绍如何连接中国区.如 问题 ...

  6. 树莓派修改根文件系统为f2fs

    目录 前言 操作简述 我的实际操作步骤 1. 准备 2. 查看树莓派分区信息 3. 备份根分区 4. 格式化树莓派TF卡根分区为f2fs文件系统 5.恢复备份 前言 在TF卡.固态硬盘之类的nand存 ...

  7. 解决网页无法复制粘贴选中的问题 显示vip无法复制解决方案

    方法:先是按F12打开控制台点击console输入以下代码!!!! 解决网页禁止鼠标右键,无法被选中的 第一种: javascript:(function() { function R(a){ona ...

  8. 4、zookeeper的事件监听机制

    watcher概念 https://zookeeper.apache.org/doc/r3.4.14/zookeeperProgrammers.html#sc_WatchRememberThese z ...

  9. VSCode 配置 Spring Boot 项目开发环境

    神器IDEA在升级到2023之后越发卡顿, EDU邮箱也不能用了, 照现在这个JDK版本的升级速度, 神器不升级也不行, 需要开始物色替代品. 其它IDE我用得少, VSCode还是比较熟悉的, 可以 ...

  10. vscode 格式化 vue 等文件的 配置 eslint vetur prettier Beautify

    需求 自动格式化需求 多行回车 合并一行,去分号 最后一个逗号,自动删除,符合eslint 结果 虽然能用了,但是 百度好几个方案,也不知道哪个对哪个,太忙没时间弄了. 配置文件记录 eslint 得 ...