分析:记dp[x][s][1]为从第x个数开始,剩余s段可以分,1表示x跟上一段连着,0表示不连着,递推式为dp[x][s][1]=max{dp[x+1][s][1]+a[x],dp[x+1][s][0]},dp[x][s][0]=max{dp[x+1][s-1][1]+a[x],dp[x+1][s ...
分类:
其他好文 时间:
2017-06-21 00:23:20
阅读次数:
247
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大。 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度。 第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。 输出格式: 输入文件maxsum1.out仅包括1个整数,为最大的 ...
分类:
其他好文 时间:
2017-06-14 20:16:46
阅读次数:
565
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1024 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1053 【题解】 本题也是51nod 1053 最大m子段和 和上题很像 ...
分类:
其他好文 时间:
2017-05-30 16:17:39
阅读次数:
178
【算法】DP 【题解】开long long…… #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=50010; int a[maxn],n; int main() { ...
分类:
其他好文 时间:
2017-05-29 22:57:36
阅读次数:
195
一、动态规划的基本思想 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。 将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。适合于用动态规划求解的问题,经分解得到子问题往往不是互相独 ...
分类:
编程语言 时间:
2017-05-23 01:16:01
阅读次数:
323
给出一个长度n的序列:A1,A2,A3,……,An。求最大连续子段和。即:要求找到1<=i<=j<=n,使得A[i]+ A[i+1]+……+A[j]尽量大。 题目来源: 洛谷OJ: P1115 最大子段和题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大。输入格式: 输入文件maxsum ...
分类:
编程语言 时间:
2017-05-20 18:27:03
阅读次数:
291
传送门 这题大概就是传说中的动态树形DP了吧,学习了一波…… 首先,对于没有修改的情况,不难想到树形DP,定义$f_i$表示强制必须选$i$且只能再选$i$的子树中的点的最优解,易得转移方程$f_i=\sum_{j是i的儿子}\max\{f_j,0\}+w_i$,最终答案即为$\max\{f_i\} ...
分类:
其他好文 时间:
2017-05-16 23:05:29
阅读次数:
143
一、比较朴素的算法 算法思想:我们确定每个子段和开始的位置,分别为第一个,第二个,第三个......第N个,然后计算从这个位置开始到这个位置之后的每个位置的子段和,更新记录最大的子段和。 时间复杂度:O(n^2) 算法实现(Java): 二、分治法(递归) 算法思想: 通过分治的思想求最大子段和,将 ...
分类:
编程语言 时间:
2017-05-09 21:40:04
阅读次数:
175
P1115 最大子段和 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大。 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度。 第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。 输出格式: 输入文件maxsum1.out ...
分类:
其他好文 时间:
2017-05-05 19:28:25
阅读次数:
185
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 题意: 思路: 情况无非分为两种: ①正常的最大子段和。 ②首尾相连的最大子段和,此时中间的那段肯定是最小子段和,用总的sum-最小子段和即可。 最后比较两者大小。 ...
分类:
编程语言 时间:
2017-05-03 20:38:42
阅读次数:
196