loj#10172 涂抹果酱 (状压DP)
题目:
解析:
三进制的状压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)的更多相关文章
- loj 1316(spfa预处理+状压dp)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27024 题意:求0-(n-1)的经过最多的标记的点的最短路. 思路 ...
- 2018.09.10 loj#10172. 涂抹果酱(状压dp)
传送门 三进制状压感觉有点难写啊. 不过这题状态转移方程挺简单的. 就直接f[i][j]表示前i行第i行状态为j时的选法总数,分情况转移就行了. 代码: #include<bits/stdc++ ...
- Loj 6433. 「PKUSC2018」最大前缀和 (状压dp)
题面 Loj 题解 感觉挺难的啊- 状压\(dp\) 首先,有一个性质 对于一个序列的最大前缀和\(\sum_{i=1}^{p} A[i]\) 显然对于每个\(\sum_{i=p+1}^{x}A[i] ...
- loj #6177. 「美团 CodeM 初赛 Round B」送外卖2 状压dp floyd
LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- Nginx类
nginx常见错误页面有哪些?对于其解决方法是什么? 404 bad request 请求失败,请求所希望得到的资源未被在服务器上发现.没有信息能够告诉用户这个状况到底是暂时的还是永久的.假如服务器知 ...
- IDEA安装maven和设置自动配置下载包
在我们开发的过程中如果环境配置好了,对于我们开发将优很大作用,减少可开发的时间,接下来我就讲解一下maven的安装和配置,以及在idea上配置,希望此教程同时对大家优帮助. 1.1.下载maven和安 ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...
- python27期day03:字符串详解:整型、可变数据类型和不可变数据类型、进制转换、索引、切片、步长、字符串方法、进制转换、作业题。
1.%s: a = "我是新力,我喜欢:%s,我钟爱:%s"b = a%("开车","唱跳rap")print(b)2.整型: 整数在Pyt ...
- LeetCode 139. Word Break单词拆分 (C++)
题目: Given a non-empty string s and a dictionary wordDict containing a list of non-emptywords, determ ...
- Centos7下搭建NFS服务器与连接详解
一,环境介绍 本实验使用了两台centos7虚拟机,其中 服务器:192.168.1.188 客户端:192.168.1.189 二,实验步骤 192.168.1.1 ...
- python读写、创建文件、文件夹等等
python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...
- 热情组——项目冲刺 Day5
项目相关 作业相关 具体描述 班级 班级链接 作业要求 链接地址 团队名称 热情组 作业目标 实现软件制作,以及在福大的传播 Github链接 链接地址 SCRUM部分: 成员昵称 昨日目标 开始时间 ...
- 深入理解C语言 - 指针使用的常见错误
在C语言中,指针的重要性不言而喻,但在很多时候指针又被认为是一把双刃剑.一方面,指针是构建数据结构和操作内存的精确而高效的工具.另一方面,它们又很容易误用,从而产生不可预知的软件bug.下面总结一下指 ...
- 论文阅读: Building a 3-D Line-Based Map Using Stereo SLAM
Abstract 一个把直线用作feature的SLAM系统. 跟点相比, 直线对于环境的结构提供了更丰富的信息, 也让其鞥有可能推断地图的空间语义. 使用了Plucker line coordian ...