最大连续子序列和 分治思想和动态规划思想

来源:互联网 发布:java oracle数据库连接 编辑:程序博客网 时间:2024/06/05 02:25

解决最大连续子序列和的两种方法:分治,动态规划。

分治时间复杂度虽然更高,但我还是写了一遍加深对这种思想的理解:将一个问题分治成若干个小的同样思路的子问题来解决。本题将所求序列等分成左右两个子序列,愿序列的最大子序列和必是左序列最大子序列和,有序列最大子序列和,跨左右子序列最大和三者中的最大者。

动态规划:用dp[i]更新dp[i+1]就行。

分治:

////  main.cpp//  1109////  Created by Fangpin on 15/3/9.//  Copyright (c) 2015年 FangPin. All rights reserved.//#include <iostream>#include <cstdio>#include <cstring>using namespace std;int a[104];int f(int l,int r){    int m=(l+r)>>1;    if(l>=r) return a[l];    int left=f(l,m);    int right=f(m+1,r);    int mid=-1e10,sum=0;    for(int i=m;i>=0;--i){        sum+=a[i];        mid=max(mid,sum);    }    sum=0;    int maxn=-1e10;    for(int i=m+1;i<=r;++i){        sum+=a[i];        maxn=max(maxn,sum);    }    mid+=maxn;    if(left>=mid && left>=right) return left;    else if(right>=left && right>=mid) return right;    else return mid;}int main(int argc, const char * argv[]) {    // insert code here...    int t;    scanf("%d",&t);    while(t--){        int n;        scanf("%d",&n);        for(int i=0;i<n;++i)            scanf("%d",&a[i]);        printf("%d\n",f(0,n-1));    }    return 0;}

动态规划:

////  main.cpp//  1109////  Created by Fangpin on 15/3/9.//  Copyright (c) 2015年 FangPin. All rights reserved.//#include <iostream>#include <cstdio>#include <cstring>using namespace std;int a[104],dp[104];int main(int argc, const char * argv[]) {    // insert code here...    int t;    scanf("%d",&t);    while(t--){        int n;        scanf("%d",&n);        for(int i=0;i<n;++i)            scanf("%d",&a[i]);        memset(dp,0,sizeof(dp));        dp[0]=a[0];        int ans=a[0];        for(int i=1;i<n;++i){            if(dp[i-1]>0)                dp[i]=dp[i-1]+a[i];            else dp[i]=a[i];            ans=max(ans,dp[i]);        }        printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 衣服用84洗黄了怎么办 白色衣服用84漂黄了怎么办 84把衣服泡黄了怎么办 84把衣服洗花了怎么办 衣服用84洗掉色怎么办 被84褪色的衣服怎么办 衣服被84烧红了怎么办 84溅到衣服上边怎么办 84把衣服泡花了怎么办 衣服颜色洗旧了怎么办 蒙版画笔用不了怎么办 眼睛小血管破裂出血怎么办 雅漾喷头坏了怎么办 一夜都是浅睡眠怎么办 注塑机合不了膜怎么办 吸了塑料烧焦味怎么办 热熔的管漏水怎么办 45岁了月经不来怎么办 吃了芒果身上痒怎么办 10个月宝宝上火怎么办 1个月的宝宝上火怎么办 2个月的婴儿上火怎么办 1岁宝宝不吃奶粉怎么办 奶水不够宝宝又不吃奶瓶怎么办 13岁脸上长粉刺怎么办 脸敷面膜过敏了怎么办 婴儿面膜是假的怎么办 一贴面膜就过敏怎么办 一敷面膜就过敏怎么办 敷了面膜后过敏怎么办 脸做面膜过敏了怎么办 二十几年的疤痕怎么办 三星c5听筒坏了怎么办 胖子减肥后皮肤松弛怎么办 小婴儿脸上长癣怎么办 痘痘里面有脓怎么办 牛仔外套买大了怎么办 脸上痘印红红的怎么办 眼罩里的水干了怎么办 面膜水进眼睛里怎么办 面膜用剩的精华怎么办