题目:

#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. pdfium去掉v8支持

    GYP_DEFINES='pdf_enable_v8=0 pdf_enable_xfa=0' build/gyp_pdfium 未测试  ???????????

  2. clickhouse数据库

    https://www.jianshu.com/p/a5bf490247ea https://www.cnblogs.com/davygeek/p/8018292.html  开源分布式数据库 htt ...

  3. 201871010110-李华《面向对象程序设计(java)》第十六周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  4. Spring Boot应用启动器

    SpringBoot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-b ...

  5. day24_7.30 反射与元类

    一.反射 在python中,反射通常是指一个对象应该具备,可以检测修复,增加自身属性的能力. 而反射可以通过字符串对其进行操作. 其中涉及了4个函数,是四个普通 的函数: hasattr(oop,st ...

  6. nginx开启网站目录浏览功能

    一.开启全站目录浏览功能 编辑nginx.conf, 在http下面添加以下内容: autoindex on; # 开启目录文件列表 autoindex_exact_size on; # 显示出文件的 ...

  7. USACO 利润Profits

    洛谷P3009 [USACO11JAN]利润Profits 题解  https://www.luogu.org/problemnew/solution/P3009 JDOJ 2727: USACO 2 ...

  8. Linux查看网卡传输速率总结

    1.使用ethtool命令 ethtool ens192   使用ethtool命令后面直接接网卡名称可以查看到部分信息,包括网卡协商速率等等.   还有一种如果服务器内有很多块网卡,我们想查看具体网 ...

  9. ESP8266 LUA脚本语言开发: 准备工作-为方便学习(统一使用本人编译的固件)

    前言 注:为了咱后期统一起来,所以统一使用我编译的LUA固件 一,固件打开了SmartConfig / AirKiss 配网功能 二,打开了SSL 三,其它模块化程序 刷空固件 一,为了保证固件是干净 ...

  10. ZROI 暑期高端峰会2019 总结

    FBI Warning:以下博客含有 FBI Warning 的都是包含大量人类本质之一的. 前几天听课: Day1 组合计数 Day1 序列数据结构 Day2 线性代数 Day3 图论 Day3 字 ...