csps 线性dp
合唱队形
正反分别求一遍最长上升子序列,然后枚举中间的最高点,计算出来队列里面的最多人,然后就可以知道需要出列的最少人。
过河
tips:两个互质的数字 p,q,他们所不能拼出来的最小的数字是 \((p-1)(q-1) - 1\)。
我们可以用 \(f[i]\) 表示经过长度 i 之间,我们所踩石头的最小数量。
但是整个区间的长度过于长(1e9)我们没有办法放在下标里面,我们就可以用上面的 tip 来解决问题。我们可以知道,如果两个石子之间的距离超过了 100 (更准确地说是 91) 那么我们就可以把他给缩放成 100。这样子就解决了这个长度过长的问题。
转移方程:
\]
传纸条
题目相当于是让我们跑两次求路径和的最大值。这样的话,我们可以考虑同时跑这两个,对于这个图的一个转态表示,首先想到的应该是思维分别存储 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[i][j][k]\) 表示 我们已经用 A 中前 i 个字母表示了 B 中的 前 j 个字母,且已经分成了 k 段的方案数。
但是我们的空间复杂度会炸掉,就要考虑空间优化。
空间优化的方法:
- 如果只跟上一步有关,可以让第一维变成 2 使用滚动数组增加空间效率。
- 如果第一维只跟上一层有关,之后的几维都是从它之前的状态转移过来,我们就可以省去第一维,然后将第二维用倒序的方法进行更新。
先分析三维的:对于一个已经有了长度为 t 的一个串 A 我们首先可以写出来转移方程。
\]
然后我们再列出 i - 2 的情况,发现有很大一部分是会被重复计算的。
所以我们可以用前缀和来维护这个值。
\]
我们可以用前缀和来提前处理出来后面这个求和
\]
然后我们的式子就变成了
\]
我们再用上叙的方法,就可以切掉这题。
Emiya家今天的饭
状态表示:只用前 i 种烹饪方法,做了 j 道菜的方案数。
状态转移:$$f[i][j] = f[i][j-1] + f[i-1][j-1] * \sum_{i=1}^{m} a[i]$$
csps 线性dp的更多相关文章
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...
- Codeforces 176B (线性DP+字符串)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...
- 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门 ...
- 动态规划——线性dp
我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...
- POJ 2479-Maximum sum(线性dp)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ...
- poj 1050 To the Max(线性dp)
题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...
- nyoj44 子串和 线性DP
线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...
- 『最大M子段和 线性DP』
最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M &g ...
- 『最长等差数列 线性DP』
最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ...
- cf909C 线性dp+滚动数组好题!
一开始一直以为是区间dp.. /* f下面必须有一个s 其余的s可以和任意f进行匹配 所以用线性dp来做 先预处理一下: fffssfsfs==>3 0 1 1 dp[i][j] 表示第i行缩进 ...
随机推荐
- 鸟类识别系统Python+Django+TensorFlow+卷积神经网络算法【完整代码】
一.介绍 鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法.并通过对数据集进行训练,最后得到一个识别精度较高的模型.并基于Django框架,开 ...
- SSM项目整合思路以及代码
当前真实的企业开发中,SpringBoot已经统一Java企业应用开发,很少有在使用SSM项目来进行项目开发的. 可是在教学阶段,还是很有必要给学生讲解Java开发中一套很经典的框架,SSM框架.作为 ...
- clickhouse使用入门
转载请注明出处(- ̄▽ ̄)-严禁用于商业目的的转载- 导语:同学,你也不想你根本不懂ClickHouse,却赶鸭子上架使用的事情被其他人知道吧? 写在前面:本文旨在让原先有一定SQL基础的人快速简单了 ...
- 4.6 x64dbg 内存扫描与查壳实现
LyScript 插件中默认提供了多种内存特征扫描函数,每一种扫描函数用法各不相同,在使用扫描函数时应首先搞清楚不同函数之间的差异,本章内容将分别详细介绍每一种内存扫描函数是如何灵活运用,并实现一种内 ...
- HTML前端js
ajax请求方法书写 $.ajax({ type:"POST", url:CONTEXT_PATH+"/appAudit/insertSnDocCountAdmin&qu ...
- 面由 AI 生|ZegoAvatar 捏脸技术解析
一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"."沉 ...
- Java Maven Settings配置参考
介绍 快速概览 settings.xml文件中的 settings 元素包含用于定义以各种方式配置Maven执行的值的元素,如pom.xml,但不应绑定到任何特定项目或分发给受众.这些值包括本地仓库位 ...
- Openjob 1.0.5 发布,新增 Agent
什么是 Openjob? Openjob 基于Akka架构的新一代分布式任务调度框架.支持多种定时任务.延时任务.工作流设计,采用无中心化架构,底层使用一致性分片算法,支持无限水平扩容. 完善的任务日 ...
- jquery解决跨域问题
在Ajax请求的url不是本地或者同一个服务器下面的URI,最后虽然请求显示为200,但是不会返回任何数据,事实上简单来说请求同一个域名下的url或者说用不带http的绝对路径和相对路径请求是没有任何 ...
- 记一次 HTTPS 抓包分析和 SNI 的思考
日常听说 HTTPS 是加密协议,那现实中的 HTTPS 流量,是真的完全加密吗? --答案是,不一定.原因嘛,抓个包就知道了. 我们用 curl 命令触发一下: curl -v 'https://s ...