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列 ...
随机推荐
- [leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树Z字形层序遍历
相对于102题,稍微改变下方法就行 迭代方法: 在102题的基础上,加上一个变量来判断是不是需要反转 反转的话,当前list在for循环结束后用collection的反转方法就可以实现反转 递归方法: ...
- java图像开发学习——JTable之导入数据库
package demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.MouseAd ...
- 定期删除文件夹中的文件——C#
下面是自定义的一个函数,参数分别为:文件夹名称.文件后缀.保存天数 逻辑是获取当前系统的时间,和文件创建时间去作差,如果结果大于保存天数,就删除它 /// <summary> /// 定期 ...
- java内部类笔记
内部类 1. 普通内部类 <pre name="code" class="java">class className{ [private|pro ...
- 在vscode中配置sass savepath
1.先在VSCode上面安装插件:Live Sass Compiler 2.创建好scss文件夹文件和css文件夹 3.然后在VSCode的控制台上打开Live sass watching模式(控制台 ...
- 如何不使用 overflow: hidden 实现 overflow: hidden
一个很有意思的题目.如何不使用 overflow: hidden 实现 overflow: hidden? CSS 中 overflow 定义当一个元素的内容太大而无法适应块级格式化上下文时候该做什么 ...
- 第6章 未来的函数:生成器和promise
目录 1. 生成器函数 1.1 定义生成器函数 1.2 迭代器对象 1.3 对迭代器进行迭代 1.4 把执行权交给下一个生成器 2. 使用生成器 2.1 用生成器生成ID 2.2 用迭代器遍历DOM树 ...
- 【C++】《Effective C++》第二章
第二章 构造/析构/赋值运算 条款05:了解C++默默编写并调用哪些函数 默认函数 一般情况下,编译器会为类默认合成以下函数:default构造函数.copy构造函数.non-virtual析构函数. ...
- 【MySQL】Last_SQL_Errno: 1594Relay log read failure: Could not parse relay log event entry...问题总结处理
备库报错: Last_SQL_Errno: 1594 Last_SQL_Error: Relay log read failure: Could not parse relay log event e ...
- 【Linux】rsh进程缓慢问题处理
环境CentOS 6.5 由于项目上线时间很长,服务器持续很久没有关机重启过,随后发现rsh反应特别慢 rsh登陆服务器的反应最慢时候3分钟才可以建立链接,登陆之后查看服务器负载是否正常,查看cpu, ...