操作序列:简单的二维 dp。

观察

我们每次操作可以让 \(x\) 变为 \(2x-1\),或者当 \(x\) 为奇数时让 \(x\) 变为 \(\frac{x+1}{2}\)。

显然,执行第一种操作,会使 \(x\) 变成奇数。

那一旦我们连续执行两次操作,\(x\) 就会变为:

\[\frac{(2x+1)-1}{2}=\frac{2x}{2}=x
\]

也就是说,当 \(x\) 为奇数时,这两个操作互逆。当 \(x\) 为偶数时,无法操作。

因此,在任何时候,第一次操作的次数都要大于等于第二次操作的次数。这像极了括号匹配,任何时候左括号必须大于右括号。

其中左括号是操作 \(1\),右括号是操作 \(2\)。

dp 设计

于是我们可以先在 \(x\) 为奇数时把 \(x\) 不断执行第二种操作直到变成偶数,相当于往栈里丢了几个左括号。

然后接下来我们对每次操作考虑,定义 \(dp_{i,j}\) 表示考虑前 \(i\) 位,目前栈里有 \(j\) 个左括号的方案数。

然后很显然的转移:

\[dp_{i,j}=\sum_{j=1}^{n+s}dp_{i-1,j-1}+\sum_{j=0}^{n+s-1}dp_{i-1,j+1}
\]

其中 \(s\) 表示一开始加进栈里面的左括号个数。

时间复杂度 \(O(n^2)\),可过。

其实这题可以用滚动数组优化,但是不用滚动数组仍然可以过。因为我懒,就不写滚动数组了。

特判

注意到当最后 \(x\) 能变成 \(1\) 时,无论何时使用操作 \(1\) 或者操作 \(2\) 都可以。于是此时答案就是 \(2^n\)。

代码

#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pi;
const ll mod=998244353;
ll dp[5005][6005],n,s,ans=0;
int main()
{
freopen("op.in","r",stdin);
freopen("op.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>s;
int tmp=s,qs=0;
while(tmp%2==1&&tmp>1)
{
tmp=(tmp+1)/2;
qs++;
}
if(tmp!=1)
{
dp[0][qs]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=6000;j++)
{
dp[i][j]=(dp[i-1][j-1]+dp[i][j])%mod;
}
for(int j=0;j<=6000;j++)
{
dp[i][j]=(dp[i][j]+dp[i-1][j+1])%mod;
}
}
for(int i=0;i<=6000;i++)ans=(ans+dp[n][i])%mod;
cout<<ans%mod;
return 0;
}
dp[0][0]=1;
for(int i=1;i<=n;i++)dp[i][0]=(dp[i-1][0]*2)%mod;
cout<<dp[n][0];
return 0;
}

坑点

dp 转移上限不能直接设为 \(n\),因为一开始会多丢 \(\log\) 个左括号进去。

Hetao P1391 操作序列 题解 [ 绿 ] [ 二维线性 dp ]的更多相关文章

  1. Vijos1392拼拼图的小衫[背包DP|二维信息DP]

    背景 小杉的幻想来到了经典日剧<死亡拼图>的场景里……被歹徒威胁,他正在寻找拼图(-.-干嘛幻想这么郁闷的场景……). 突然广播又响了起来,歹徒竟然又有了新的指示. 小杉身为新一代的汤浅, ...

  2. UVA1347 旅游(二维递归DP)

    旅游 [题目链接]旅游 [题目类型]DP &题解: 紫书P269 代码很简单,但思路很难.很难能想到要把一个圈分成2条线段,很难想到d(i,j)表示的是已经走过max(i,j)还需要的距离值, ...

  3. 二维线性表 list实现

    class Coordinate{ private int x; private int y; } List<Coordinate> list=new ArrayList<Coord ...

  4. 棋盘分割(二维区间DP)

    题目大意:给一个棋盘,棋盘上每个格子中都有一个值,现在需要将棋盘切成n个矩形,总共切n-1刀,求最小的均方差.均方差定义为:,其中. 题目分析:将均方差化简得到:均方差2=(Σxi2)/n-平均值2. ...

  5. 在UniApp的H5项目中,生成二维码和扫描二维码的操作处理

    在我们基于UniApp的H5项目中,需要生成一些二维码进行展示,另外也需要让用户可以扫码进行一定的快捷操作,本篇随笔介绍一下二维码的生成处理和基于H5的扫码进行操作.二维码的生成,使用了JS文件wea ...

  6. HDU 4819 Mosaic 二维线段树

    Mosaic Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  7. poj2155二维树状数组

    Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...

  8. Android应用--QR的生成(二维码)

    二维码的定义: 二维码(2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的. 在许多种类的二维条码中,常用的码制 ...

  9. 低差异序列 (low-discrepancy sequences)之Halton序列均匀产生多维随机数的介绍与实现

    Halton序列 在统计学中,Halton序列是用于生成空间中的点的序列,如Monte Carlo模拟的数值方法,虽然这些序列是确定性的,但它们的差异性很低,也就是说,在许多方面看起来是随机的.它们在 ...

  10. PHP二维码生成的方法(google APi,PHP类库,libqrencode等)

    原文地址: http://blog.csdn.net/liuxinmingcode/article/details/7910975 ================================== ...

随机推荐

  1. ai大模型流式输出------基于SSE协议的长连接实现

    传统的http1.0请求开发,已经满足了我们日常的web开发.一般请求就像下图这样子,客服端发起一个请求(触发),服务端做出一个响应(动作): 有时会有诸如实时刷新,实时显示的场景,我们往往是客户端定 ...

  2. 药企如何实现ERP系统与CRM系统的整合

    ERP系统与CRM系统整合的意义深远,对于企业尤其是药企来说,这种整合能够带来多方面的优势和改进.可以确保企业内部数据的一致性和准确性:优化业务流程.增强决策支持:从而提高企业的整体运营效率和市场竞争 ...

  3. word常规操作

    为何写标 招标: A公司要买100台电脑 [需求] 投标: 电脑公司看到招标后,就会投标:自我介绍(公司,产品,售后) [自我介绍满足需求] 中标: A公司选择XX公司 [选择] 保密价格内容 不能透 ...

  4. 规范LR(1)语法分析表

    前面已经实现了SLR语法分析表,但是可能会出现即使语法不是二义性文法,也存在移入/规约冲突 状态 i 包含项[A ->α ],当状态 i 出现在栈顶时,栈中的可行前缀时βα且在任何最后句型中a都 ...

  5. Object-relational impedance mismatch (转载)

    http://www.agiledata.org/essays/impedanceMismatch.html Why does this impedance mismatch exist?  The ...

  6. django介绍及基本使用

    目录 一.python主流web框架 二.django简介 1.版本问题 2.运行django注意事项 三.django基本使用 1.下载模块 2.验证 3.常见命令 4.pycharm自动创建dja ...

  7. 强化学习:使用自动控制方法PID来解决强化学习问题中的cartpole问题(小车平衡杆问题)

    网上找到的一个实现: 地址: https://gist.github.com/HenryJia/23db12d61546054aa43f8dc587d9dc2c 稍微修改后的代码: import nu ...

  8. Qt音视频开发19-海康sdk录像存储

    一.前言 关于调用海康sdk来进行录像存储,整体的框架架构处理流程沿袭了之前vlc内核.ffmpeg内核.mpv内核的做法,定时存储这块,开个定时器判断,到了时间则先关闭原来的录像存储,然后在开始一个 ...

  9. 即时通讯技术文集(第45期):微信、QQ技术精华合集(Part2) [共14篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第45 期. [-1-]  QQ音乐团队分享:Android中的图片压缩技术详解(上篇) [链接 ...

  10. docker导入和导出

    save和export 镜像导入和导出有2种方式,分别为 save和load.export和import save导出的是镜像:export导出的为容器 save导出会保存镜像所有的提交记录:expo ...