#轮廓线dp#洛谷 2435 染色
题目
有一个 \(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 染色的更多相关文章
- 树形DP 洛谷P2014 选课
洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...
- 洛谷——P3914 染色计数
P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...
- 洛谷 P3914 染色计数
P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...
- 区间DP 洛谷P2858牛奶零食
题目链接 题意:你有n个货物从1-n依次排列,每天可以从两侧选一个出来卖,卖的价格是当天的天数乘该货物的初始价格,问这批货物卖完的最大价格 输入:第一行n,之后是n个货物的初始价值 这道题不能用贪心做 ...
- P1279 字串距离 dp 洛谷
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...
- dp 洛谷P1977 出租车拼车 线性dp
题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...
- 洛谷P2486 染色
LCT的一种姿势. 题意:给定一棵树.每次把一条路径上的点染成一种颜色,求一条路径上有多少段颜色. 解: 首先可以很轻易的用树剖解决,只不过代码量让人望而却步... 有一种难以想象的LCT做法... ...
- 经典DP 洛谷p1880 石子合并
https://www.luogu.org/problemnew/show/P1880 题目 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新 ...
- [DP]洛谷P1115最大子段和
题目来源 https://www.luogu.org/problemnew/show/P1115 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一 ...
- 尼克的任务 dp 洛谷1280
蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...
随机推荐
- win32-使用FillRect绘制具有渐变颜色的客户区域背景
void OnEraseBkGnd(HWND hwnd) { /* Vars */ HDC dc; /* Standard Device Context; used to do the paintin ...
- 类型判断,代码块,流程控制及循环---day05
1.类型判断isinstance 用来做判断类型 语法: 用法一: isinstance(要判断的值,要判断的类型) 返回的是真或者假 用法二: isinstance(要判断的值,(可能的类型))如果 ...
- Vue3学习(十九) - TreeSelect 树选择
写在前面 我知道自己现在的状态很不好,以为放个假能好好放松下心情,结果昨晚做梦还在工作,调试代码,和领导汇报工作. 天呐,明明是在放假,可大脑还在考虑工作的事,我的天那,这是怎么了? Vue页面参数传 ...
- java个人博客
效果浏览 首页 详情页 Aboutme 后台管理 管理/添加博客 添加分类 管理员管理 友情链接 访问地址 前台地址http://localhost 后台地址:http://localhost/adm ...
- HashMap源码窥探
目录 前言 HashMap的数据结构 HashMap的put方法 HashMap的get方法 HashMap的初始化 HashMap的containsKey方法 HashMap的putAll方法 Ha ...
- 如何避免MYSQL主从延迟带来的读写问题?
在MYSQL 部署架构选型上,许多公司都会用到主从读写分离的架构,如下是一个一主一从的架构,主库master负责写入,从库slave进行读取. 但是既然是读写分离,必然会面临这样一个问题,当在主库上进 ...
- Zabbix6.0使用教程 (一)—zabbix新增功能介绍2
上一篇我们已经介绍了部分zabbix6.0的新增功能,这期我们将继续为家详细介绍下余下的zabbix6.0新增功能,大家可以往下看. 六.监控项 6.1 自动类型选择 监控项配置表单会自动建议匹配的信 ...
- 基于linux环境的MP3文件转WAV文件实例解析
一 概念解析 1.前记 FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec--这是一个用于多个项目中音频和视频的解码器库,以及libavformat ...
- 一个简单的HTTP服务器的实现
我们继续我们的HTTP服务器的实现(使用别的代码来实现), 这个HTTP服务器的实现,我们主要就是关注TCP服务器中的recv还有send的处理. 首先,看一下HTTP,我们在用浏览器访问我们的TCP ...
- 关于全景(360)图片拼接的方法(Opencv3.0 Stitcher)----续(一)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...