Poj2479 & Poj 2593】的更多相关文章

就是按着DP的思路来做的,结果还是想不到.T_T,行了,别玻璃心了,继续. 这道题目是求在一列数里,由两部分子段和组成的最大和.即对于连续整数组成的串 S1.S2,使 S1 + S2 的和最大. 题目与求最大子段和有相似之处,可以说是最大子段和的变形. 最大子段和: 在一列数里,对于连续整数组成的串S,使 S 的值最大. 最大子段和的动态规划方程, dp[i] = max(dp[i-1] + arr[i], arr[i]); 意义:当遍历到当前第 i 个数时,比较 {前一状态dp[i-1] 加上…
Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16850   Accepted: 7054 Description Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N). You should output S. Input The input will consist of several test cases. Fo…
题目链接:http://poj.org/problem?id=2593 思路分析:该问题为求给定由N个整数组成的序列,要求确定序列A的2个不相交子段,使这m个子段的最大连续子段和的和最大. 该问题与poj 2479相同,解法也一样: 代码如下: #include <cstdio> #include <iostream> using namespace std; + ; int arr[MAX_N], dp_s[MAX_N], dp_r[MAX_N]; int arr_num; in…
d(A) = max{sum(a[s1]..a[t1]) + sum(a[s2]..a[t2]) | 1<=s1<=t1<s2<=t2<=n} 即求两个子序列和的和的最大值. 为单个区间子序列和的最大值的变形. 左边的从左向右扫描,而右边的从右向左扫描即可. #include<cstdio> #include<algorithm> using namespace std; const int MAXN=50000+10; int left[MAXN],…
Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17678   Accepted: 7401 Description Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N).  You should output S.  Input The input will consist of several test cases.…
Max Sequence Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16329   Accepted: 6848 Description Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N). You should output S.  Input The input will consist of several test cases. F…
#include <iostream> #include <stdio.h> using namespace std; int cmp ( const void *a , const void *b ) { return *(int *)b - *(int *)a; } int main() { ]; ) { sum=; flag=; scanf("%d",&n); ) break; ;i<n;i++) { scanf("%d"…
虽然是两个水题,但是一次AC的感觉真心不错 这个问题算是maximum-subarray问题的升级版,不过主要算法思想不变: 1. maximum-subarray问题 maximum-subarray就是找到数组A[1....n]中的连续子数组A[i.....j]并且A[i]+...+A[j]和最大.当然了,(1<=i<=j<=n). maximum-subarray的O(n)解法就是从左到右扫描数组A,另外设置一工具数组DP,DP数组的作用就是记录以当前下标为终止下标的子数组和.比如…
题目链接:http://poj.org/problem?id=2479 解题报告: 1.再求left[i]的时候,先没有考虑a[i]的正负,先把a[i]放到left[i]中,然后left=max(left[i-1],left[i]); 2.res=max(res,left[i-1]+right[i]); #include <stdio.h> #include <algorithm> using namespace std; #define MAX 50005 int a[MAX];…
此文来自北京邮电大学ACM-ICPC集训队 此50题在本博客均有代码,可以在左侧的搜索框中搜索题号查看代码. 以下是原文: POJ推荐50题1.标记“难”和“稍难”的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉.2.标记为A and B的题目是比较相似的题目,建议大家两个一起做,可以对比总结,且二者算作一个题目.3.列表中大约有70个题目.大家选做其中的50道,且每类题目有最低数量限制.4.这里不少题目在BUPT ACM FTP上面都有代码,请大家合理利用资源.5.50个题目要…