#状压dp#D 诗人小K

分析
考虑题目的唯一突破口就是\(x,y,z\)
那么要与二进制状态挂上钩,状态应表示某一段正好为\(x,y或z\)
设\(g[s][i]\)表示当前位置的元素为\(i\),上一次状态为\(s\),
所能表示出的状态,这需要分类讨论一下,特别地,当能表示出\(z\)时,结果为\(2^z\)
那么通过这个预处理,dp就很好写了
代码
#include <cstdio>
#define rr register
using namespace std;
int n,x,y,z,al,dp[140001][41],g[140001][41];
signed main(){
scanf("%d%d%d%d",&n,&x,&y,&z),
y+=x,z+=y,al=1<<z;
for (rr int S=1;S<=al;++S)
for (rr int i=1;i<=10;++i){
g[S][i]=1;
if (S==al) g[S][i]=al;
else{
for (rr int j=0;j<z;++j)
if (((S>>j)&1)&&i+j<=z&&(j>=x||i+j<=x)&&(j>=y||i+j<=y))
g[S][i]|=1<<(i+j);
if (g[S][i]>al) g[S][i]=al;
}
}
dp[1][0]=1;
for (rr int i=0;i<n;++i)
for (rr int S=1;S<=al;++S) if (dp[S][i])
for (rr int j=1;j<=10;++j)
dp[g[S][j]][i+1]=(dp[g[S][j]][i+1]+dp[S][i])%1000000007;
return !printf("%d",dp[al][n]);
}
#状压dp#D 诗人小K的更多相关文章
- [Luogu P3959] 宝藏 (状压DP+枚举子集)
题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...
- 【BZOJ1087】 [SCOI2005]互不侵犯King 状压DP
经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J #include <iostre ...
- 【BZOJ-1097】旅游景点atr SPFA + 状压DP
1097: [POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 1531 Solved: 352[Submit][Sta ...
- jzoj 5230 队伍统计(状压DP)
Description 现在有n个人要排成一列,编号为1->n .但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有m条矛盾关系(u,v),表示编号为u的人想要排在编号为v的人前面 ...
- BZOJ 1226 学校食堂(状压DP)
状压DP f(i,j,k)表示前i−1个人已经吃了饭,且在i之后的状态为j的人也吃了饭(用二进制表示后面的状态),最后吃的那个人是i之后的第k个 (注意k可以是负数) 然后 如果j&1=1那么 ...
- [USACO06NOV]玉米田Corn Fields (状压$dp$)
题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) . 同时多记录一个每一列中的 ...
- [SCOI2005]互不侵犯 (状压$dp$)
题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 位国王,且最后一位状态为 \(k\) . 然后就可以很轻松的转移了 ...
- 状压DP小拼盘
有的DP题,某一部分的状态只有两种,选或不选. 开数组记录,代价太大,转移不方便. 状态压缩意为,用 “0/1“ 表示 “选/不选“ . 把状态表示为二进制整数. There are 10 kinds ...
- K - Painful Bases 状压dp
Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...
- Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...
随机推荐
- Jenkins流水线使用@Grab 导入Maven库
有个需求需要在pipeline中调用Java的SDK去执行业务 使用 @Grab 注解可以在Maven中导入Java 库, @Grab('org.apache.commons:commons-math ...
- django中信号
# 信号的理解 在某个行为进行的某个阶段给这个行为添加一个附带的行为 # 相关api ## 数据表 pre_init # django的model执行其构造方法前,自动触发 post_init # d ...
- 【Java复健指南01】简介与数组
写在最前 学习Java已经是很久之前的事情了,因为技术栈的转变,很久没有使用Java正经地开发过项目. 对于该语言的理解也是停留在表面,因此萌生了重新学习的念头.一方面是为刷算法题打基础,另一方面也是 ...
- ECMA Script Module(ES module)知识点
1.每个 ES Module 都是运行在单独的私有作用,ESM 自动采用严格模式,忽略use strict <script type="module">console. ...
- 【Azure App Service】如何来停止 App Service 的高级工具站点 Kudu ?
问题描述 如何来停止 App Service 的高级工具站点 Kudu ? kudu 介绍 Kudu 提供了一组面向开发人员的工具和扩展点,用于您的应用服务应用程序. Kudu (Advanced T ...
- 【Azure 应用服务】Azure Function 部署槽交换时,一不小心把预生产槽上的配置参数交换到生产槽上,引发生产错误
问题描述 部署Function代码先到预生产槽中,进行测试后通过交换方式,把预生产槽中的代码交换到生产槽上,因为在预生产槽中的设置参数值与生产槽有不同,但是在交换的时候,没有仔细检查.导致在交换的时候 ...
- Linux操作系统不同文件类型区别?
蓝色代表目录,绿色代表可执行文件,红色代表压缩文件.浅蓝色表示连接文件.白色表示其他文件 相关目录及作用: Bin : 存放普通用户可执行的指令 Boot: 开机引导目录 Dev:设备目录 Etc: ...
- Java-- Arrays操纵数组的工具类
1 //操作数组的工具类 java.util.Arrays :操作数组的工具类 里面定义了很多操作数组的方法 2 public static void main(String[] args) 3 { ...
- vue3使用路由keep-alive和监听路由实现transition
随着vue3.0的发布,vue-router发布了4.0版本,文档 很明了,提供了vue2路由到vue3的变化和写法指导. vue2: // transition <transition nam ...
- 利用Nginx正向代理实现局域网电脑访问外网
引言 在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的.这时候,可以借助 Nginx 来搭建一个正向代理服务器,实现局域网内电脑通过 Nginx ...