1594:涂抹果酱

时间限制: 1000 ms         内存限制: 524288 KB

【题目描述】

Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕。蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M 个边长为 1×1 的小正方形区域(可以把蛋糕当成 N 行 M 列的矩阵)。蛋糕很快做好了,但光秃秃的蛋糕肯定不好看!所以,Sam 要在蛋糕的上表面涂抹果酱。果酱有三种,分别是红果酱、绿果酱、蓝果酱,三种果酱的编号分别为 1,2,3。为了保证蛋糕的视觉效果,Admin 下达了死命令:相邻的区域严禁使用同种果酱。但 Sam 在接到这条命令之前,已经涂好了蛋糕第 K 行的果酱,且无法修改。

现在 Sam 想知道:能令 Admin 满意的涂果酱方案有多少种。请输出方案数 mod 106 。若不存在满足条件的方案,请输出 0。

【输入】

输入共三行。

第一行:N,M;

第二行:K;

第三行:M 个整数,表示第 K 行的方案。

字母的详细含义见题目描述,其他参见样例。

【输出】

输出仅一行,为可行的方案总数。

【输入样例】

2 2
1
2 3

【输出样例】

3

【提示】

样例说明:

方案一 方案二 方案三
2 3 2 3 2 3
1 2 3 1 3 2

数据范围与提示:

对于 30% 的数据,1≤N×M≤20;

对于 60% 的数据,1≤N≤1000,1≤M≤3;

对于 100% 的数据,1≤N≤10000,1≤M≤5。

sol:三进制的状压,稍微麻烦一点点,把满足条件的状态预处理出来,m=5时35中大约有55个是满足的,所以复杂度就会小很多,转移复杂度n*55*55

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{ll s=0;bool f=0;char ch=' ';while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}while(isdigit(ch)){s=(s<<3)+(s<<1)+(ch^48);ch=getchar();}return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{if(x<0){putchar('-');x=-x;}if(x<10){putchar(x+'0');return;}write(x/10);putchar((x%10)+'0');return;
}
inline void writeln(ll x)
{write(x);putchar('\n');return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) writeln(x)
const int Mod=1000000;
int n,m,K,Start,Bin[10];
int Id[505],Zt_cnt=0;
struct Zhuangt_Used
{int Zt,Num[6];
}Zhuangt[60];
bool Can[60][60];
int dp[10005][60];
inline void Solve(int nn)
{int i,j,k;dp[1][Id[Start]]=1;for(i=2;i<=nn;i++){for(j=1;j<=Zt_cnt;j++) if(dp[i-1][j]){for(k=1;k<=Zt_cnt;k++) if(Can[j][k]){dp[i][k]+=dp[i-1][j];dp[i][k]-=(dp[i][k]>=Mod)?Mod:0;}}}return;
}
inline int Get(int nn)
{int i,ans=0;for(i=1;i<=Zt_cnt;i++){ans+=dp[nn][i];ans-=(ans>=Mod)?Mod:0;}return ans;
}
int main()
{int i,j,k;R(n); R(m); R(K);Bin[0]=1;for(i=1;i<=m;i++) Bin[i]=Bin[i-1]*3;for(i=0;i<Bin[m];i++){int Num[6]={0},y=i;*Num=0;while(y){Num[++*Num]=y%3;y/=3;}bool Bo=1;for(j=2;j<=m&&Bo;j++) if(Num[j]==Num[j-1]) Bo=0;if(!Bo) continue;Id[i]=++Zt_cnt;Zhuangt[Zt_cnt].Zt=i;for(j=1;j<=m;j++) Zhuangt[Zt_cnt].Num[j]=Num[j];}for(i=1;i<Zt_cnt;i++){Can[i][i]=0;for(j=i+1;j<=Zt_cnt;j++){bool Bo=1;for(k=1;k<=m&&Bo;k++) if(Zhuangt[i].Num[k]==Zhuangt[j].Num[k]) Bo=0;Can[i][j]=Can[j][i]=Bo;}}for(i=1;i<=m;i++){int x=read()-1; Start+=Bin[i-1]*x;}Solve(max(K,n-K+1));Wl(1LL*Get(K)*Get(n-K+1)%Mod);return 0;
}
/*
input
2 2
1
2 3
output
3input
100 1
50
3
output
602688
*/

View Code

转载于:https://www.cnblogs.com/gaojunonly1/p/10366612.html

一本通1594涂抹果酱相关推荐

  1. 【算法•日更•第十五期】信息奥赛一本通1594:涂抹果酱题解

    废话不多说,直接上题: 1594:涂抹果酱 时间限制: 1000 ms         内存限制: 524288 KB 提交数: 146     通过数: 46 [题目描述] Tyvj 两周年庆典要到 ...

  2. #10172. 「一本通 5.4 练习 1」涂抹果酱 题解

    题目链接 一道三进制状压的好题. 题目描述: Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M的矩形,它被划分成 N×M个边长为 1×1的小正方形区域(可以把 ...

  3. 一本通5.4练习1:涂抹果酱

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

  4. #10172. 「一本通 5.4 练习 1」涂抹果酱 【 三进制状态压缩 】【 方案数 】

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

  5. LOJ#10172. 「一本通 5.4 练习 1」涂抹果酱

    题目链接:https://loj.ac/problem/10172 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×MN×MN×M 的矩形,它被划分成 ...

  6. LOJ #10172. 「一本通 5.4 练习 1」涂抹果酱

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

  7. 涂抹果酱_如何玩果酱

    涂抹果酱 在2017年All Things Open大会上 ,我和Michael Clayton进行了关于游戏果酱和开源开发工具的演讲. 这是我们演示文稿的概述. 首先,有很多原因使开发人员喜欢创建游 ...

  8. 涂抹果酱_2015年全球游戏果酱

    涂抹果酱 It's that time of the year again! Global Game Jam is on next weekend! Unity Pro trial licenses ...

  9. 三进制状压动态规划【涂抹果酱】 题解

    前言:好不容易搞懂了这道题,感觉网上能找到的题解在我有疑问的地方都讲的不是很细,所以我来写一篇吧. 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M ...

最新文章

  1. 从零学React Native之12 组件的生命周期
  2. bzoj 2724[Violet 6]蒲公英
  3. 深度学习与计算机视觉系列(4)_最优化与随机梯度下降\数据预处理,正则化与损失函数
  4. linux中的NFS服务器配置及/etc/exports
  5. ActiveMovie属性说明,使用资料。
  6. 中年程序员都在想什么?
  7. Orchard学习笔记四:启用用户注册
  8. 摘自网络--浅析UpdatePanel的partial render原理
  9. 微信消息提醒与消息数字提示之BadgeView
  10. 溢信服务转型之代理商技术培训
  11. 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)...
  12. (2018-2019)linux常用操作命令总结
  13. 为你收罗100个学英语的网站!!!
  14. 板绘如何厚涂?绘画时应该怎样厚涂?教你利用SAI结合数位板进行厚涂绘画!
  15. Shopee面试问题整理
  16. ps2015安装guideguide参考线辅助工具
  17. 微信的服务器 上海,昨下午部分用户无法收发文字信息和登录 微信回应:上海机房服务器发生故障 现已恢复...
  18. 微信公众号-定位之地址逆解析导航
  19. 基于FPGA的贪吃蛇游戏设计(1)整体架构设计
  20. 【Java应用】使用Java实现机器学习算法:聚类、分类、预测

热门文章

  1. python组合和继承_Python基础系列讲解——继承派生和组合的概念剖析
  2. C语言1013山东理工大学试题,山东理工大学史上最全C语言PPTC程序设计(2基本数据与运算).ppt...
  3. 什么是交互设计?交互设计是用来干什么的?
  4. android资源编译失败,在android studio中打开一个新项目时,Android资源编译失败
  5. WebRTC 的现状和未来:专访 W3C WebRTC Chair Bernard Aboba
  6. POJ-1008(滑雪)
  7. VS studio 2019 加 CUDA + CUDNN 开发环境配置
  8. 用Docker容器自带的tensorflow serving部署模型对外服务(成功率100%)
  9. 2017年SEO推广优化怎么做
  10. ICE通信之IceGrid服务(一)