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行缩进 ...
随机推荐
- 2021/1/10例会 academy of management journal 2014vol 57 No.2,484-514
这次的论文由于考试周的原因看的不是很细,但大概还是浏览过一遍了.然后这次我的拓展又神奇的匹配到了教授想让我们接下来想看的论文. perfect! 但不足的是,没有进行相关论文的检索,自己的拓展没有理论 ...
- rocketmq-console基本使用
rocketmq-console基本使用 作用:rocketmq-console是rocketmq的一款可视化工具,提供了mq的使用详情等功能. 一.安装部署 下载rocketmq组件 rocketm ...
- 二、GCC编译器工作过程
从更直观的角度来说,编译器是一种工具,将高级语言转化为机器语言.举个例子,我们可以使用编译器将用C++语言编写的程序转换为机器可执行的指令和数据.之前提到过,用机器指令或汇编语言编写程序非常繁琐和乏味 ...
- [Spring+SpringMVC+Mybatis]框架学习笔记:前言_目录
下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(一):SpringIOC概述 前言 本笔记用于记录本人(Steven)的SSM框架学习历程,仅用作学习.交流,不用于商业用途, ...
- SAP ABAP 使用GENIOS求解线性规划问题的简单例子
主要内容来自Operations Research & ABAP ,结合我遇到的需求,做了一些修改. 需求:有BOX1和BOX2两种箱子,分别能包装不同数量的A物料和B物料,给出若干数量的A, ...
- 烧死10亿脑细胞的SQL长啥样?
1 前言 今天在生产中碰到了一个让我十分费解的 SQL,十分有趣. 2 现象 SQL 很好复现,就是逻辑看起来有点唬人 postgres=# create table test(id1 int,id2 ...
- 2021-3-29 Enter按下事件
先在构造器中添加keydown事件 tBoxPsw.KeyDown += TBoxPsw_KeyDown; 在事件中添加按下enter按钮所触发的方法 private void TBoxPsw_Key ...
- jsp中的一些问题
jsp里的${pageContext.request.contextPath} 在JSP中,${pageContext.request.contextPath}是一个EL表达式(Expression ...
- 论文解读(MCD)《Maximum Classifier Discrepancy for Unsupervised Domain Adaptation》
Note:[ wechat:Y466551 | 付费咨询,非诚勿扰 ] 论文信息 论文标题:Maximum Classifier Discrepancy for Unsupervised Domain ...
- k8s发布应用
前言 首先以SpringBoot应用为例介绍一下k8s的发布步骤. 1.从代码仓库下载代码,比如GitLab: 2.接着是进行打包,比如使用Maven: 3.编写Dockerfile文件,把步骤2产生 ...