zoukankan      html  css  js  c++  java
  • dp求最大最小连续字段

    问题:有n个数,在其中选取连续的一段 ,使其和最大。

    解决:考虑已知目前第i数之前的部分区间和sum[i-1],如果sum[i-1]大于0的话那么加上前面的可以增加值,但如果小于0的话再增加会减少值,那么舍去前一段区间,从当前数开始重新往后加。中间维护更新一个最大值就好了。

    举一反三:同理,最小连续字段则是反过来求。如果求大小的话更新大小,求区间长度的话则维护区间长度,其中需要处理的部分是前一段部分区间和sum[i]=0的情况(到底要不要这一段区间)

    int maxsub(int a[]){
         int dp[N],maxx;maxx = dp[0] = a[0];
            for(int i = 1;i < n;++i){
                if(dp[i-1]>0)dp[i] = dp[i-1] + a[i];
                else dp[i] = dp[i-1] + a[i];
                maxx = max(dp[i],max);
        }
        return max;
    }
  • 相关阅读:
    【bozj2287】【[POJ Challenge]消失之物】维护多值递推
    书籍
    图书管理系统-单表的增删改查
    Django之ORM
    app的创建和注册
    登陆示例
    django 静态文件配置
    安装django及配置
    Bootstrap
    导图
  • 原文地址:https://www.cnblogs.com/h404nofound/p/12196882.html
Copyright © 2011-2022 走看看