题目:

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

解析:

三进制的状压DP

经过简单的打表发现,在\(m=5\)时最多有\(48\)种合法状态

然后就向二进制一样枚举当前状态和上一层的状态进行转移就好了

由于第\(k\)行是给定的,所以转移时要特判一下第\(k\)行,并且注意下一\(k=1\)的情况

设\(f[i][j]\)表示第\(i\)行\(j\)状态时的方案数

\(f[i][j] += f[i - 1][k],k是上一行的状态\)

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std; const int N = 1e5 + 10;
const int mod = 1e6; int n, m, k, num, sum = 1, sta, kk, ans;
/*
sum为状态上节
sta是第k行状态
num是合法状态数
*/
int state[N], f[10010][50];
//state记录状态
//f[i][j]表示dp 到第i行j状态的方案数 bool check(int x) { //判断状态是否合法
int len = 0;
int b[10];
while (x) b[++len] = x % 3, x /= 3;
if (len < m - 1) return 0;
for (int i = 2; i <= len; ++i) if (b[i] == b[i - 1]) return 0;
return 1;
} bool cmp(int x, int y) { //判断两个状态是否可以相邻
for (int i = 1; i <= m; ++i) {
if ((x % 3) == (y % 3)) return 0;
x /= 3, y /= 3;
}
return 1;
} signed main() {
cin >> n >> m >> k;
for (int i = 1, x; i <= m; ++i) cin >> x, kk = kk * 3 + x - 1;
for (int i = 1; i <= m; ++i) sum *= 3;
for (int i = 0; i < sum; ++i) if (check(i)) {
state[++num] = i;
if (i == kk) sta = num;
}
if (sta == 0) {
cout << 0;
return 0;
}
for (int i = 1; i <= n; ++i) {
if (i == k) {
if (i == 1) f[1][sta] = 1;
else for (int j = 1; j <= num; ++j)
if (cmp(state[sta], state[j]))
(f[i][sta] += f[i - 1][j]) %= mod;
} else {
if (i == 1) for (int j = 1; j <= num; ++j) f[i][j] = 1;
else for (int j = 1; j <= num; ++j)
for (int pre = 1; pre <= num; ++pre)
if (cmp(state[j], state[pre]))
(f[i][j] += f[i - 1][pre]) %= mod;
}
}
for (int i = 1; i <= num; ++i) (ans += f[n][i]) %= mod;
cout << ans;
}

loj#10172 涂抹果酱 (状压DP)的更多相关文章

  1. loj 1316(spfa预处理+状压dp)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27024 题意:求0-(n-1)的经过最多的标记的点的最短路. 思路 ...

  2. 2018.09.10 loj#10172. 涂抹果酱(状压dp)

    传送门 三进制状压感觉有点难写啊. 不过这题状态转移方程挺简单的. 就直接f[i][j]表示前i行第i行状态为j时的选法总数,分情况转移就行了. 代码: #include<bits/stdc++ ...

  3. Loj 6433. 「PKUSC2018」最大前缀和 (状压dp)

    题面 Loj 题解 感觉挺难的啊- 状压\(dp\) 首先,有一个性质 对于一个序列的最大前缀和\(\sum_{i=1}^{p} A[i]\) 显然对于每个\(\sum_{i=p+1}^{x}A[i] ...

  4. loj #6177. 「美团 CodeM 初赛 Round B」送外卖2 状压dp floyd

    LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 ...

  5. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  6. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  7. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  8. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  9. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

随机推荐

  1. Linux设备管理(四)_从sysfs回到ktype【转】

    转自:https://www.cnblogs.com/xiaojiang1025/archive/2016/12/21/6202298.html sysfs是一个基于ramfs的文件系统,在2.6内核 ...

  2. python安装thrift-sasl提示缺少sasl.h文件

    这其实是在pip安装Cyrus-SASL bindings for Python时报的错误. 由于没有whl文件,都是源码要经过编译之后才能安装. 所以,报这个错误,一般都是缺少安装软件造成的. 不管 ...

  3. HBuilder创建app

    一.app登录注册实现 1.首先进行布局,mhead,mbody 在app index.html内创建一个 a链接通过mui.openWindow跳到登录页面 <a class="mu ...

  4. 曹玉中-201871010105《面向对象程序设计(java)》第6-7周学习总结

    曹玉中-201871010105<面向对象程序设计(java)>第6-7周学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>    https://www.c ...

  5. CSRF/XSRF 跨站请求伪造

    CSRF/XSRF 跨站请求伪造 CSRF(Cross Site Request Forgery, 跨站域请求伪造)也称 XSRF, 是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安 ...

  6. 浅谈SOA与RPC

    一.SOA 英文名称:Service Oriented Ambiguity 中文名称:面向服务架构 SOA是一种思想,目的是提供一种设计项目的思路,让开发时更有效率. 例如原来的分布式项目中,在每个项 ...

  7. wafer2的keng

    一.之前用wafer2开发的小程序,今天突然Error: 用户未登录过,请先使用 login() 登录? 答:改用qcloud.login, 替换掉qcloud.loginWithCode (小程序代 ...

  8. TP5导入EXCEL到数据库

    前期准备工作: 1.下载PHPExcel放到vendor下 2.前端页面: <form action="save" method="post" encty ...

  9. <Math> 165 8

    165. Compare Version Numbers class Solution { public int compareVersion(String version1, String vers ...

  10. CSP2019滚粗记

    CSP2019滚粗记 从不拖更 Day -inf 考完月考才停课\kel,然后月考又被吊打了. Day -1 和左边的\({\text L}\color{red} {\text{ongge}}\)右边 ...