合唱队形

正反分别求一遍最长上升子序列,然后枚举中间的最高点,计算出来队列里面的最多人,然后就可以知道需要出列的最少人。


过河

tips:两个互质的数字 p,q,他们所不能拼出来的最小的数字是 \((p-1)(q-1) - 1\)。

我们可以用 \(f[i]\) 表示经过长度 i 之间,我们所踩石头的最小数量。

但是整个区间的长度过于长(1e9)我们没有办法放在下标里面,我们就可以用上面的 tip 来解决问题。我们可以知道,如果两个石子之间的距离超过了 100 (更准确地说是 91) 那么我们就可以把他给缩放成 100。这样子就解决了这个长度过长的问题。

转移方程:

\[f[i] \gets \min{f[i-t],f[i-t + 1], ..., f[i-s]} + w[i]
\]

传纸条

题目相当于是让我们跑两次求路径和的最大值。这样的话,我们可以考虑同时跑这两个,对于这个图的一个转态表示,首先想到的应该是思维分别存储 x1, y1, x2, y2 但是我们可以通过经验得到,我们对于同一步来说,x 与 y 的和是一个定值,所以我们就可以简化成三维,用 \(f[k][x1][x2]\) 来表示。

而且我们不难看出这个路线是不能有交叉的(但是可以有交点)。

我们在计算转移的时候从四个方向转移就行了,从上面过来,从左面过来。组合。四种转移。其中取到的格子中的数,要注意判断是不是在同一个位置,以免重复计算。

对于 x1 和 x2 的循环边界要注意是 \(\max(1, k-m)\) 不可能总共 m 列然后走出框去


乌龟棋

题目告诉了我们使用的卡片有四种,那我们不妨就按照这四种卡片的使用数量来表示我们所能取到的数字的最大值。即一个四维状态 \(f[A][B][C][D]\) 分别表示每个卡片分别用了这么多卡片之后我们所能获得的分数的最大值。

我们也只需要枚举每个卡片 A,B,C,D 的使用个数就行了。

\[f[A][B][C][D] \gets \max{f[A-1][B][C][D], f[A][B-1][C][D], f[A][B][C-1][D], f[A][B][C][D-1]} + w[1 + A + 2 * B + 3 * C + 4 * D]
\]

子串

我们用 \(f[i][j][k]\) 表示 我们已经用 A 中前 i 个字母表示了 B 中的 前 j 个字母,且已经分成了 k 段的方案数。

但是我们的空间复杂度会炸掉,就要考虑空间优化。

空间优化的方法:

  • 如果只跟上一步有关,可以让第一维变成 2 使用滚动数组增加空间效率。
  • 如果第一维只跟上一层有关,之后的几维都是从它之前的状态转移过来,我们就可以省去第一维,然后将第二维用倒序的方法进行更新。

先分析三维的:对于一个已经有了长度为 t 的一个串 A 我们首先可以写出来转移方程。

\[f[i][j][k] \gets f[i-1][j-1][k-1] + f[i-2][j-2][k-1] \dots f[i-t][j-t][k-1]
\]

然后我们再列出 i - 2 的情况,发现有很大一部分是会被重复计算的。

所以我们可以用前缀和来维护这个值。

\[f[i][j][k] \gets f[i-1][j-1][k-1] + \sum_{t=1}^{j}f[i-t][j-t][k-1]
\]

我们可以用前缀和来提前处理出来后面这个求和

\[sum[i][j][k] \gets \sum_{t=1}^{j}f[i-t][j-t][k-1]
\]

然后我们的式子就变成了

\[f[i][j][k] \gets f[i-1][j][k] + sum[i][j][k]
\]

我们再用上叙的方法,就可以切掉这题。


Emiya家今天的饭

状态表示:只用前 i 种烹饪方法,做了 j 道菜的方案数

状态转移:$$f[i][j] = f[i][j-1] + f[i-1][j-1] * \sum_{i=1}^{m} a[i]$$

csps 线性dp的更多相关文章

  1. LightOJ1044 Palindrome Partitioning(区间DP+线性DP)

    问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...

  2. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  3. hdu1712 线性dp

    //Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...

  4. 动态规划——线性dp

    我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...

  5. POJ 2479-Maximum sum(线性dp)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33918   Accepted: 10504 Des ...

  6. poj 1050 To the Max(线性dp)

    题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...

  7. nyoj44 子串和 线性DP

    线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...

  8. 『最大M子段和 线性DP』

    最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M &g ...

  9. 『最长等差数列 线性DP』

    最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ...

  10. cf909C 线性dp+滚动数组好题!

    一开始一直以为是区间dp.. /* f下面必须有一个s 其余的s可以和任意f进行匹配 所以用线性dp来做 先预处理一下: fffssfsfs==>3 0 1 1 dp[i][j] 表示第i行缩进 ...

随机推荐

  1. AI作画本地搭建

    前言 Novel AI (简称NAI)是一个线上的深度学习小说续写平台,而 NAI Diffusion 是 NAI 在2022年10月3日推出的基于 Stable Diffusion 算法的自动生成二 ...

  2. axios详解以及完整封装方法

    """ 一.axios是什么 Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中. 它是 isomorphic 的(即同一套代码可以运行 ...

  3. Microsoft edge锁定在任务栏上,被修改主页360的解决方法

    今天从桌面下边的任务栏打开Microsoft edge浏览器,突然发现主页被篡改为360导航了(生气!恶龙咆哮ooo 在桌面上是Microsoft edge,固定到任务栏就成为Microsoft ed ...

  4. 智能制造之路—从0开始打造一套轻量级MOM平台

    一.概述 面对数字化浪潮,MOM需求迈入上升期,数字化从"可选项"变成了企业竞争"必选项".制造行业每个工厂的生产逻辑都不尽相同,流程的梳理.数据统一化都需要调 ...

  5. gin 接口开发 - 用户输入自动 TrimSpace

    最近在思考一个问题,针对用户的输入,能不能快速校验? 比方说下面的 struct,大家用过 gin 的就知道,支持指定某个字段为 required,用户如果不输入,就检验不通过. type Login ...

  6. Centos静默安装Oracle11G

    环境准备 Oracle 11gR2 64位 Linux版安装包 linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip ...

  7. 实践分析丨AscendCL应用编译&运行案例

    本文分享自华为云社区<AscendCL应用编译&运行问题案例>,作者: 昇腾CANN. AscendCL(Ascend Computing Language)是一套用于在昇腾平台上 ...

  8. Redis从入门到放弃(7):主从复制

    1.概念 主从复制是Redis的一项重要特性,用于将一个Redis服务器(Master主节点)的数据复制到其他Redis服务器(Slave从节点),以实现数据的高可用性和读写分离.数据的复制是单向的, ...

  9. 您在 /var/spool/mail/root 中有新邮件

    查看邮件 删除邮件 禁止系统启动邮件检查这样就再有邮件提示了 mail cat /dev/null > /var/spool/mail/root echo "unset MAILCHE ...

  10. 用ChatGPT三分钟免费做出数字人视频- 提升自媒体魅力

    本教程收集于:AIGC从入门到精通教程汇总 操作指引 ChatGPT产生文案=>腾讯智影数字人播报=>粘贴文案=>导出视频. 说明:部分资源只有会员才能用~,非会员可生成5分钟视频. ...