一本通1594涂抹果酱
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 【提示】样例说明:
数据范围与提示: 对于 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涂抹果酱相关推荐
- 【算法•日更•第十五期】信息奥赛一本通1594:涂抹果酱题解
废话不多说,直接上题: 1594:涂抹果酱 时间限制: 1000 ms 内存限制: 524288 KB 提交数: 146 通过数: 46 [题目描述] Tyvj 两周年庆典要到 ...
- #10172. 「一本通 5.4 练习 1」涂抹果酱 题解
题目链接 一道三进制状压的好题. 题目描述: Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M的矩形,它被划分成 N×M个边长为 1×1的小正方形区域(可以把 ...
- 一本通5.4练习1:涂抹果酱
题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M个边长为 1×1 的小正方形区域(可以把蛋糕当成 N行M列的矩阵).蛋糕 ...
- #10172. 「一本通 5.4 练习 1」涂抹果酱 【 三进制状态压缩 】【 方案数 】
Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M 个边长为 1×1 的小正方形区域(可以把蛋糕当成 NNN 行 MMM 列的矩阵) ...
- LOJ#10172. 「一本通 5.4 练习 1」涂抹果酱
题目链接:https://loj.ac/problem/10172 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×MN×MN×M 的矩形,它被划分成 ...
- LOJ #10172. 「一本通 5.4 练习 1」涂抹果酱
题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M 个边长为 1×1 的小正方形区域(可以把蛋糕当成 NNN 行 MMM ...
- 涂抹果酱_如何玩果酱
涂抹果酱 在2017年All Things Open大会上 ,我和Michael Clayton进行了关于游戏果酱和开源开发工具的演讲. 这是我们演示文稿的概述. 首先,有很多原因使开发人员喜欢创建游 ...
- 涂抹果酱_2015年全球游戏果酱
涂抹果酱 It's that time of the year again! Global Game Jam is on next weekend! Unity Pro trial licenses ...
- 三进制状压动态规划【涂抹果酱】 题解
前言:好不容易搞懂了这道题,感觉网上能找到的题解在我有疑问的地方都讲的不是很细,所以我来写一篇吧. 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M ...
最新文章
- 从零学React Native之12 组件的生命周期
- bzoj 2724[Violet 6]蒲公英
- 深度学习与计算机视觉系列(4)_最优化与随机梯度下降\数据预处理,正则化与损失函数
- linux中的NFS服务器配置及/etc/exports
- ActiveMovie属性说明,使用资料。
- 中年程序员都在想什么?
- Orchard学习笔记四:启用用户注册
- 摘自网络--浅析UpdatePanel的partial render原理
- 微信消息提醒与消息数字提示之BadgeView
- 溢信服务转型之代理商技术培训
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)...
- (2018-2019)linux常用操作命令总结
- 为你收罗100个学英语的网站!!!
- 板绘如何厚涂?绘画时应该怎样厚涂?教你利用SAI结合数位板进行厚涂绘画!
- Shopee面试问题整理
- ps2015安装guideguide参考线辅助工具
- 微信的服务器 上海,昨下午部分用户无法收发文字信息和登录 
微信回应:上海机房服务器发生故障 现已恢复...
- 微信公众号-定位之地址逆解析导航
- 基于FPGA的贪吃蛇游戏设计(1)整体架构设计
- 【Java应用】使用Java实现机器学习算法:聚类、分类、预测
热门文章
- python组合和继承_Python基础系列讲解——继承派生和组合的概念剖析
- C语言1013山东理工大学试题,山东理工大学史上最全C语言PPTC程序设计(2基本数据与运算).ppt...
- 什么是交互设计?交互设计是用来干什么的?
- android资源编译失败,在android studio中打开一个新项目时,Android资源编译失败
- WebRTC 的现状和未来:专访 W3C WebRTC Chair Bernard Aboba
- POJ-1008(滑雪)
- VS studio 2019 加 CUDA + CUDNN 开发环境配置
- 用Docker容器自带的tensorflow serving部署模型对外服务(成功率100%)
- 2017年SEO推广优化怎么做
- ICE通信之IceGrid服务(一)