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列 ...
随机推荐
- sql语句用法大全
https://www.w3school.com.cn/sql/sql_in.asp .substr函数格式 (俗称:字符截取函数) 格式1: substr(string string, int ...
- Solon 1.2.13 发布,开启与 Springboot 的互通
Solon 一个类似Springboot的微型开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,3500多次的commit:内核保持0.1m的身材,超高的Web跑分,良好的使用体验. ...
- git fork , git pull request那回事
git fork 原理 相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中时,可以pull request,这样原项目的作者就可以将你修改的东西合并到 ...
- Eclipse 使用svn时出现 “Previous operation has not finished; run 'cleanup' if it was interrupted“问题
在执行svn操作的时候出现了下面的问题 commit -m "" E:/eclipse/workplace/BRobotAPP/blockly/googleDemo/blockly ...
- mysql plugin
mysql plugin 概要 mysql可以通过启动参数,系统命令mysql_install,mysql命令install plugin来加载指定的插件 mysql的存储引擎被设计成插件式,可以根据 ...
- Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
目录 Java并发包源码学习系列:AQS共享模式获取与释放资源 独占式获取资源 void acquire(int arg) boolean acquireQueued(Node, int) 独占式释放 ...
- Java并发编程实战(4)- 死锁
在这篇文章中,我们主要讨论一下死锁及其解决办法. 目录 概述 死锁案例 死锁的原因和预防 破坏占用且等待条件 破坏不可抢占条件 破坏循环条件 使用等待-通知机制 Java中的等待-通知机制 条件曾经满 ...
- Java 使用拦截器无限转发/重定向无限循环/重定向次数过多报错(StackOverflowError) 解决方案
说明:当使用拦截器出现"请求转发"无限循环或者"重定向"次数过多这种问题的时候,一般都是 拦截器 设置错了 情况一:请求转发时没有配置排除拦截路径,就是说你访问 ...
- 【Flutter】可滚动组件简介
前言 当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误.为此,Flutter提供了多种可滚动组件(Scrollable Widget)用于 ...
- --safe-user-create
此参数如果启用,用户将不能用grant语句创建新用户,除非用户有mysql数据库中user表的insert权限, ./mysqld_safe --safe-user-create & 用-- ...