摘要:
分析题目知道求一个最长上升子序列和一个最长下降子序列的长度均为同一个起点的最长的长度。于是求 点击查看代码 #include <iostream> #include <stack> #include <cmath> #include <algorithm> #include <set> #inclu 阅读全文
posted @ 2024-10-19 14:13
Aloongyy
阅读(5)
评论(0)
推荐(0)
摘要:
很明显的一个动态规划问题:后面的状态与前面的状态有关,dp[i][j]表示以i为结尾公差为j的等差数列的个数,所以状态转移方程就出来了。还有一个问题是公差为负的话考虑加上一个数,确保相减后的公差必为正数。 点击查看代码 #include <iostream> #include <stack> #in 阅读全文
posted @ 2024-10-19 13:58
Aloongyy
阅读(13)
评论(0)
推荐(0)
摘要:
要走两次因此,考虑一个四维的数组来实现,然后如果i=k&&j==l的话记得减一次即得到答案。 点击查看代码 #include <iostream> #include <stack> #include <cmath> #include <algorithm> #include <set> #inclu 阅读全文
posted @ 2024-10-19 10:57
Aloongyy
阅读(8)
评论(0)
推荐(0)
摘要:
dp[a][b][c][d]表示走了a+b2+c3+d*4步的当前的最大值,状态转移方程就出来了。 点击查看代码 #include <iostream> #include <stack> #include <cmath> #include <algorithm> #include <set> #in 阅读全文
posted @ 2024-10-19 10:39
Aloongyy
阅读(14)
评论(0)
推荐(0)
摘要:
尝试了几次发现添加的字符数等于n-正着的和反着的最长公共子序列的长度,即为答案。正序与倒序“公共”的部分就是我们回文的部分,如果把正序与倒序公共的部分减去你就会惊奇的发现剩余的字符就是你所要添加的字符,也就是所求的正解。 点击查看代码 #include <iostream> #include <st 阅读全文
posted @ 2024-10-19 10:21
Aloongyy
阅读(50)
评论(0)
推荐(0)
摘要:
首先考虑动态规划,a[i]==b[j],f[i][j]=f[i-1][j-1]+1,否则 f[i][j]=max(f[i-1][j],f[i][j-1]);然后看了一眼数据范围,被卡的实施的,然后考虑优化,看到题目是一个排列于是不要考虑重复的问题,于是只在b里看,如果b[i]在a中的位置,小于我们维 阅读全文
posted @ 2024-10-19 10:09
Aloongyy
阅读(31)
评论(0)
推荐(0)