HDOJ-1024(动态规划+滚动数组)】的更多相关文章

2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) . \(T\) ,都以 \(.\) 结尾,求 \(S\) . \(T\) 最长公共子序列的长度及个数. 分析: 一顿操作猛如虎,一看分数250--爆零了.原本就没准备拿几分,结果令人心塞. 第一问就是求最长公共子序列长度,数据范围比较小, \(O(n^2)\) 就行,上来就是一顿树状数组+LIS,…
给一字符串,问最少加几个字符能够让它成为回文串. 比方 Ab3bd 最少须要两个字符能够成为回文串 dAb3bAd 思路: 动态规划 DP[i][j] 意味着从 i 到 j 这段字符变为回文串最少要几个字符,枚举子串长. if str[i] == str[j]: DP[i][j] = DP[i + 1][j - 1] else: DP[i][j] = min( DP[i + 1][j], DP[i][j - 1] ) + 1 注意: 长度较大为 5000,二维数组 5000 * 5000 须要将…
题意是说,给定一个字符串,问至少还需要插入多少个字符才能使得该字符串成为回文字符串. 这道题一开始做的时候用了一个简单的动态规划,开了一个5000*5000的数组,用递归形式实现,代码如下: 其中d[i][j]表示i到j所需要插入的字符数.然而数组开得太大直接报MLE.因此想到用滚动数组来解决. MLE代码如下: #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> u…
题目链接:https://cn.vjudge.net/problem/HDU-1024 题意 给n, m和一个序列,找m个不重叠子串,使这几个子串内元素和的和最大. n<=1e6 例:1 3 1 2 3 答:6 (唯一的子串1 2 3) 思路 先顺便记录一下动态规划的一般解题思路: 原问题->子问题->状态->转移->边界 再顺便记录一下最大值最小化这类问题套路解法: 二分 贪心 不能二分的问题,贪心八九不离十. 一般是AB和BA这两个元素的顺序,不影响前后变化时,直接算目标…
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <cmath> #include <cstring> #include <stack> #include <set> #include <map> #include <vector> using namespace st…
Max Sum Plus Plus HDOJ-1024 动态转移方程:dp[i][j]=max(dp[i][j-1]+a[j],max(dp[i-1][k])+a[j]) (0<k<j) 其中dp[i][j]表示前i个数分为j个子段的最大值 转移有两个方向:一个是分为i个子段,第j个属于第i个子段.另一个转移方向就是第j个单独形成一个子段,前k(0-j)个组成i-1个子段. 由于本题n太大,而m也没有给出,所以按照上面的想法需要有三重循环,会超时.所以需要使用滚动数组. 注意第二维需要正序遍历…
Max Sum Plus Plus 题意:题意理解了老半天,这里是说在给定数列中,取m组子数列,不能有重复,使得这些子序列的和最大: 就比如m=2时候,1 /2/-4/5/6.可以不用拿-4的意思: 思路:这道题的思路是动态规划,递推: 状态dp[i][j] 表示有前j个数,组成i组的和的最大值. 决策: 第j个数,要么包含在第i组里面,要么自己独立成组. 其中最后一组包含a[j].(这很关键) 则状态转移方程为:(在二维图中,就是要么从左边取,要么取上一行的最大值,下式中,左边max是包含在第…
为了肾六 时间限制:4000 ms  |  内存限制:210535 KB 难度:2 描述 最近肾六很流行,goshawk看身边的朋友都用上了apple.自己还用着W年前的Samsung.于是决定去IT公司打工,都是为了肾六.现在上司让他解决下面的一个小问题,但是goshawk没学好算法,被这个问题难住了,聪明的你帮帮他吧. 给一个n个整数的序列p1,p2,p3.....pn.你要以下面的方式选k对整数. < ... < lk ≤ rk ≤ n; ri - li + 1 = m),  为了让这个…
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 23697    Accepted Submission(s): 8094 Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem.…
HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交. 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值,其中第i个子序列包括a[j], 则max(dp[m][k]),m<=k<=n 即为所求的结果 <2>初始状态: dp[i][0] = 0, dp[0][j] = 0; <3>状态转移: 决策:a[j]自己成为一个子段,还是接在前面一个子段的后面 方程: a[j]直接接在前面…