loj10172
涂抹果酱
Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕。蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M 个边长为 1×1 的小正方形区域(可以把蛋糕当成 NNN 行 MMM 列的矩阵)。蛋糕很快做好了,但光秃秃的蛋糕肯定不好看!所以,Sam 要在蛋糕的上表面涂抹果酱。果酱有三种,分别是红果酱、绿果酱、蓝果酱,三种果酱的编号分别为 1,2,31,2,31,2,3。为了保证蛋糕的视觉效果,Admin 下达了死命令:相邻的区域严禁使用同种果酱。但 Sam 在接到这条命令之前,已经涂好了蛋糕第 KKK 行的果酱,且无法修改。
现在 Sam 想知道:能令 Admin 满意的涂果酱方案有多少种。请输出方案数 mod106。若不存在满足条件的方案,请输出 000。
------------------------------------------------------------------------------------------------------------------------------
状态压缩动态规划
三进制状态压缩,转移方程式很简单,问题只是处在三进制的处理!
------------------------------------------------------------------------------------------------------------------------------
1 #include<bits/stdc++.h>
2 using namespace std;
3
4 int nn,n,m,k,sk;
5 long long f[10010][1<<5+5];
6 int st[1<<5+5],js;
7 int maxm=1;
8
9 void getst()
10 {
11 for(int i=0;i<m;++i)maxm*=3;
12 for(int ii=0;ii<maxm;++ii)
13 {
14 int i=ii,bz=1;
15 int pre=-1;
16 for(int cur,j=0;j<m;++j)
17 {
18 cur=i%3;
19 if(cur==pre){
20 bz=0;
21 break;
22 }
23 pre=cur;
24 i/=3;
25 }
26 if(bz)st[js++]=ii;
27 }
28 }
29 bool bj(int x,int y)
30 {
31 x=st[x];y=st[y];
32 for(int i=0;i<m;++i)
33 {
34 int xx=x%3,yy=y%3;
35 if(xx==yy)return 0;
36 x/=3;y/=3;
37 }
38 return 1;
39 }
40 void dp()
41 {
42 for(int i=0;i<js;++i)f[1][st[i]]=1;
43 for(int i=2;i<=nn;++i)
44 {
45 for(int s=0;s<js;++s)
46 {
47 for(int ss=0;ss<js;++ss)
48 if(bj(ss,s))f[i][st[s]]=(f[i][st[s]]+f[i-1][st[ss]])%1000000;
49 }
50 }
51 }
52 int main()
53 {
54 scanf("%d%d%d",&n,&m,&k);
55 for(int tp,i=0;i<m;++i)
56 {
57 scanf("%d",&tp);tp--;
58 sk=sk*3+tp;
59 }
60 getst();
61 nn=max(k,n-k+1);
62 dp();
63 cout<<f[k][sk]*f[n-k+1][sk]%1000000;
64 return 0;
65 }
loj10172的更多相关文章
- Loj10172 涂抹果酱
题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M 个边长为 1×1 的小正方形区域(可以把蛋糕当成 NNN 行 MMM列 ...
随机推荐
- 手摸手带你用Hexo撸博客(二)之配置主题
在上一篇博客手摸手带你用Hexo撸博客(一)中主要介绍了博客的初步搭建 今天我们继续讲如何在Hexo搭建的博客中应用主题 官网选择自己喜欢的主题 点击这里Hexo主题进入官网主题页面 然后选择自己喜欢 ...
- JS 获取(期号、当前日期、本周第一天、最后一天及当前月第一、最后天函数)
JS 获取(期号.当前日期.本周第一天.最后一天及当前月第一.最后天函数 /** 2 * 获取当前月期号 3 * 返回格式: YYYY-mm 4 * / 5 function getCurrentMo ...
- java零基础之---eclipse的使用
想写一篇关于初学者如何使用工具的博客,作为初学者使用IDE的第一个工具,深受大家喜欢,先写一篇eclipse的,然后再逐步推出idea, vscode 等 1. eclipse的下载及安装 1)百度搜 ...
- cmake的安装
安装cmake有2种方式 安装方式1:源码安装 1.下载cmake源码包(https://cmake.org/download/),解压后进入解压目录 2.执行安装配置命令:配置软件二进制安装到/us ...
- Flink SQL 核心概念剖析与编程案例实战
本次,我们从 0 开始逐步剖析 Flink SQL 的来龙去脉以及核心概念,并附带完整的示例程序,希望对大家有帮助! 本文大纲 一.快速体验 Flink SQL 为了快速搭建环境体验 Flink SQ ...
- 在Docker下进行MyCAT管理双主双从MySQL集群
前言 在Docker下双主双从MySQL集群模拟 https://www.cnblogs.com/yumq/p/14259964.html 本文实验配置文件 Docker拉取MyCAT镜像 如果没启动 ...
- flask socketio 踩坑记录
在使用python3的flask-socketio+socket.io.js的时候报错 在使用python3的flask-socketio+socket.io.js的时候报错"unsuppo ...
- zabbix自动发现主机并注册
- zabbix的汉化
1.在windows中找一个自己喜欢的字体(C:\Windows\Fonts)或者去网上下载一个 2.将字体上传到zabbix的web相关目录的fonts目录下 (我的zabbix的web相关的文件都 ...
- 面试时通过volatile关键字,全面展示线程内存模型的能力
面试时,面试官经常会通过volatile关键字来考核候选人在多线程方面的能力,一旦被问题此类问题,大家可以通过如下的步骤全面这方面的能力. 1 首先通过内存模型说明volatile关键字的作用 ...