最大子段和 (含变形)【dp】
2017-04-26 22:08
232 查看
最大子段和
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba
abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A
第2行:字符串B
(A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Input示例
abcicba
abdkscab
Output示例
abca
1266: 最大子段和
时间限制: 1 秒 内存限制: 64 MB
提交: 448 解决: 130
提交 状态
题目描述
一个大小为n的数组a1到an(−10^4≤ai≤10^4)。请你找出一个连续子段,使子段长度为奇数,且子段和最大。
输入
第一行为T(1≤T≤5),代表数据组数。
之后每组数据,第一行为n(1≤n≤10^5),代表数组长度。
之后一行n个数,代表a1到an。
输出
每组数据输出一行,表示满足要求的子段和最大值
样例输入
1
4
1 2 3 4
样例输出
9
思路 :
代码
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
abcicba
abdkscab
ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
Input
第1行:字符串A
第2行:字符串B
(A,B的长度 <= 1000)
Output
输出最长的子序列,如果有多个,随意输出1个。
Input示例
abcicba
abdkscab
Output示例
abca
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #include<queue> #include<stack> #include<map> #include<vector> #include<set> #define CLR(a,b) memset((a),(b),sizeof(a)) #define inf 0x3f3f3f3f #define mod 100009 #define LL long long #define M 10000 #define ll o<<1 #define rr o<<1|1 #define lson o<<1,l,mid #define rson o<<1|1,mid+1,r using namespace std; int main() { LL n; scanf("%lld",&n); int i,j;LL ans=0,sum=0; for(i=0;i<n;i++) { LL a; scanf("%lld",&a); sum+=a; if(sum<0) sum=0; ans=max(ans,sum); } printf("%lld\n",ans); return 0; }
1266: 最大子段和
时间限制: 1 秒 内存限制: 64 MB
提交: 448 解决: 130
提交 状态
题目描述
一个大小为n的数组a1到an(−10^4≤ai≤10^4)。请你找出一个连续子段,使子段长度为奇数,且子段和最大。
输入
第一行为T(1≤T≤5),代表数据组数。
之后每组数据,第一行为n(1≤n≤10^5),代表数组长度。
之后一行n个数,代表a1到an。
输出
每组数据输出一行,表示满足要求的子段和最大值
样例输入
1
4
1 2 3 4
样例输出
9
思路 :
代码
#include<cstdio> #include<cstring> #define M 100000+100 #include<algorithm> using namespace std; int a[M]; int dp[M]; int main() { int t; scanf("%d",&t); while(t--) { int n; memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); dp[0]=a[0];dp[1]=a[1]; int sum=max(dp[0],dp[1]); for(int i=2;i<n;i++) { dp[i] = max(dp[i-2]+a[i-1]+a[i],a[i]);//对于接下来的每个数字来说 其 i-2 的数字来说是 奇数,所以判断一下到底加不加就可以了 sum = max(dp[i],sum);// 不断记录 其中最大的和 } printf("%d\n",sum); } return 0; }
相关文章推荐
- 51Nod 1051 最大矩阵和(DP—最大子段和变形)
- 51Nod 1050 循环数组最大子段和(DP—最大子段和变形)
- FZU 2253 DP(最大子段和变形)
- 动态规划问题-DP 最大子段和O(n)解决方法
- HAUT 1266 最大子段和(类似DP)(河南工业大学2017校赛)
- 51Nod 1051 最大子矩阵和 (最大子段和变形)
- HDU-1003 Max Sum (最大子段和问题DP)
- [51nod] 1050 循环数组最大子段和 dp
- 51Nod-1049 最大子段和【DP】
- hdu1003 dp(最大子段和)
- 2017河工大邀请赛G题_1266: 最大子段和_Dp
- HAUT 1266 最大子段和(类似DP)(河南工业大学2017校赛)
- HDU 5586 简单最大子段和变形
- 51nod 1052[最大子段和]【DP】
- 【dp专题1】hdu1003 D - Max Sum 【最大子段和模板题】
- 51nod 1049 1049 最大子段和 (dp)
- (DP)最大子段和问题分析和总结(…
- hdu 1069 Monkey and Banana 再来一波DP啦~~LIS的变形,会最大上升子序列就可以A啦~
- HDU 1003 Max Sum 最大子段和dp解题
- [51NOD1959]循环数组最大子段和(dp,思路)