涂抹果酱

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的更多相关文章

  1. Loj10172 涂抹果酱

    题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M 个边长为 1×1 的小正方形区域(可以把蛋糕当成 NNN 行 MMM列 ...

随机推荐

  1. [leetcode]725. Split Linked List in Parts链表分块

    思路很简单  按时链表的题做起来很容易犯小错误,思维要缜密 还要多练习啊 做之前最好画算法框图 public ListNode[] splitListToParts(ListNode root, in ...

  2. 嵌入式LInux-让开发板访问外网-ping bad address baidu.com

    我的嵌入式设备已经接入网络.能够ping局域网ip.可是为了实现能够ping通外网.比如 ping baidu.com 还是不行的. 当运行ping baidu.com这个命令时,提示 ping ba ...

  3. 最全总结 | 聊聊 Python 办公自动化之 PPT(中)

    1. 前言 上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作 最全总结 | 聊聊 Python 办公自动化之 PPT(上) 作为 ...

  4. C语言几种排序算法

    (1)选择排序算法:选择排序算法是,将第一个数和其它的数比较,将较小的数(从小到大的排列)和第一个数换位,以此类推 #include<stdio.h> int main() { int i ...

  5. 手把手教你搭建SSH框架(Eclipse版)

    原文来自公众号[C you again],若需下载完整源码,请在公众号后台回复"ssh". 本期文章详细讲解了SSH(Spring+SpringMVC+Hibernate)框架的搭 ...

  6. 【MySQL 高级】索引优化分析

    MySQL高级 索引优化分析 SQL 的效率问题 出现性能下降,SQL 执行慢,执行时间长,等待时间长等情况,可能的原因有: 查询语句写的不好 索引失效 单值索引:在 user 表中给 name 属性 ...

  7. 【JS学习】数组过滤方法的使用filter

    前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 使用效果: 可以返回参数函数为真的值 //情景:实现从stu数 ...

  8. 【MySQL】centos6中/etc/init.d/下没有mysqld启动文件,怎么办

    如果/etc/init.d/下面没有mysqld的话,service mysqld start也是不好使的,同样,chkconfig mysqld on也是不能用 解决办法: 将mysql的mysql ...

  9. 汇编学习笔记——DOS及DEBUG介绍

    转自:https://www.shiyanlou.com/courses/running/332 一.课程简介 声明:该课程基于<汇编语言(第2版)>郑晓薇 编著,机械工业出版社.本节实验 ...

  10. jQuery库 之 jquery slimscroll插件使用

    1.引入jQuery插件 <script type="text/javascript" src="jquery.min.js"></scrip ...