涂抹果酱

题目描述

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

输入描述:

输入共三行。第一行:N,M;第二行:K;第三行:M个整数,表示第K行的方案。字母的详细含义见题目描述,其他参见样例。

输出描述:

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

输入

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。

题目思路:因为有三种果酱,所以考虑三进制状压dp,首先初始化三进制的合法状态(相邻的不能一样),用一个vector保存f[i][j]表示第i行状态为[v[j]]时前i行的方案数,judge用来判断上下两行是否合法,index代表第k行状态在vector中的下标。因为第k行已经固定,所以要分为两个阶段,第一阶段为k行以上的方案数,第二阶段为k行以下的方案数,注意第一阶段结束后f[k][index]要重新归1。最后的答案就是两个阶段相乘的方案数取模

代码如下:
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000
using namespace std;
ll n,m,k,a[6],f[10010][100],mode,ans1,ans2;
vector<ll> v;
void init(int x,int y)//初始化合法状态
{if(x==m){v.push_back(y);return ;}else if(x==0){init(1,0),init(1,1),init(1,2);return ;}if((int)(y/pow(3,x-1))%3==0)init(x+1,y+1*pow(3,x)),init(x+1,y+2*pow(3,x));else if((int)(y/pow(3,x-1))%3==1)init(x+1,y+0*pow(3,x)),init(x+1,y+2*pow(3,x));elseinit(x+1,y+0*pow(3,x)),init(x+1,y+1*pow(3,x));
}
bool judge(int x,int y)//判断x状态和y状态分别为上下两行时是否合法
{int wei = m;while(wei--){int a = x%3,b = y%3;if(a==b)return false;x/=3,y/=3;}return true;
}
int main()
{cin>>n>>m>>k;for(int i = 0;i<m;i++){cin>>a[i];mode+=pow(3,m-1-i)*(a[i]-1);//mode记录第k行状态
    }  init(0,0);int index = find(v.begin(),v.end(),mode)-v.begin();if(index==v.size())//如果第k行的状态不合法
    {cout<<0;return 0;}  if(k==1)//如果k为1,那么第一阶段方案数为1
    {ans1 = 1;f[k][index] = 1;} if(k!=1){for(int i = 0;i<v.size();i++)f[1][i] = 1;} for(int i = 2;i<=n;i++){if(i==k){for(int l = 0;l<v.size();l++){if(judge(mode,v[l])){f[i][index]+=f[i-1][l];f[i][index]%=mod;}}ans1 = f[i][index]%mod;f[i][index] = 1;continue;}for(int j = 0;j<v.size();j++){for(int l = 0;l<v.size();l++){if(judge(v[j],v[l])&&f[i-1][l]){f[i][j]+=f[i-1][l];f[i][j]%=mod;}}}}for(int j = 0;j<v.size();j++)ans2 = (ans2+f[n][j])%mod;cout<<(ans1*ans2)%mod;return 0;
}

如果有错误的地方,还请各位大佬指正。

转载于:https://www.cnblogs.com/loganacmer/p/11296808.html

涂抹果酱(状压dp)相关推荐

  1. 涂抹果酱(三进制状压dp)

    涂抹果酱(状压dp) 题目描述 输入描述: 输出描述: 示例 输入 输出 说明 备注: 题目思路: 代码 欢迎关注微信公众号:Java后台开发 题目描述 Tyvj两周年庆典要到了,Sam想为Tyvj做 ...

  2. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  3. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  4. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  5. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  6. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  7. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  8. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

  9. P2340 奶牛会展(状压dp)

    P2340 奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由 ...

  10. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

最新文章

  1. PyTorch 源码解读之分布式训练了解一下?
  2. 深入理解学习Git工作流
  3. jQuery样式操作
  4. Mac OS X 10.9.3 Beta 8升级教程
  5. ajax 参数大小限制,Ajax中的POST数据大小是否有限制?
  6. 4.有关日期格式属性修改常识,v$nls_parameters,between and,查询指定部门的员工信息,in和null,like模糊查询,order by后面可以跟:列名、表达式、别名、序号
  7. 【概率DP】$P2059$ 卡牌游戏
  8. 云原生领域首本架构白皮书,你Get到了吗?
  9. 自测-2 素数对猜想
  10. spark 通过打散热点key解决数据倾斜问题
  11. MySQL常用函数大全(总结篇)
  12. 环洋市场调研-2022年全球一次性餐具市场总体规模及应用细分研究报告
  13. 统计学练习题——组合,排列组合
  14. 比较好的文档翻译软件-哪个翻译软件最精准
  15. Cool Edit Pro 2.0 Resample.xfm
  16. [06.21] LinkLabel 代码重构和我的SinaWeibo7 Project Todolist
  17. 走访最没存在感的省份之一,经济仍有潜力
  18. 如何选择适合你的兴趣爱好(三十三),国画
  19. 一步一步学做一个CPU——3,用QuartusII通过原理图完成与门电路设计
  20. Linux Centos7目录结构总结

热门文章

  1. xml和接口简单理解
  2. 初来乍到,请多多指教
  3. H3C交换机远程端口镜像配置
  4. 基于NXP i.MX 8M Plus处理器的核心板和开发板有什么功能
  5. 前后端分离之图片上传服务端处理方法(亲测通过)
  6. oracle 数据泵导出时间,Oracle DMP备份文件使用数据泵expdp/impdp导出导入dmp文件
  7. 《生命》第三集:Mammals (哺乳动物)
  8. 视频号直播信用分总被扣?如何提高信用分?
  9. Python查询天数
  10. 蛋白质语言建模?伯克利RoshanRao157页博士论文《训练,评估和理解蛋白质序列的进化模型》...