• dp第三题


    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    int main()
    {
        int n;
        int a[105];
        int dp[105];
        while(cin >> n)
        {
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
            {
                cin >> a[i];
            }
            for(int i=1;i<=n;i++)
            {
                if(dp[i-1]>0)
                {
                    dp[i]=dp[i-1]+a[i];
                }
                else
                {
                    dp[i]=a[i];
                }
            }
            int max=-1000;
            for(int i=1;i<=n;i++)
            {
                if(dp[i]>max)
                {
                    max=dp[i];
                }
            }
            cout << max << endl;
        }
        return 0;
    }

    已知有一个序列{Ai},其中都是整数,但不一定为正数,请求出其中连续的一段子串,使得这个子串的所有值相加的和最大,子串不允许为空。(最大子段和)

    状态:dp[i]代表包含i点,且不包含i+1及之后的点,的子串中的最大和。

    状态转移方程:dp[i-1]>0?dp[i]=dp[i-1]+a[i]:dp[i]=a[i];

  • 相关阅读:
    CSS 中 Position relative 和 absolute区别
    感受到LDT的好处
    Map数据结构
    break和continue
    vue的ref属性
    css小样式
    搭建vue开发环境
    setTimeout和clearTimeout
    垂直居中
    vertical-align 属性
  • 原文地址:https://www.cnblogs.com/markliu/p/2496726.html
Copyright © 2020-2023  润新知