zoukankan      html  css  js  c++  java
  • 求连续段最大和(dp)

    最大的和


    Time limit: 1000MS    Memory limit: 32768K
    Total Submit: 77    Accepted: 39


    Problem Description
    给出一串 a[1],a[2],a[3]......a[n], 计算出最大的字串和
    For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.

    Input
    第一行给出一个数字 T(1<=T<=20) 代表接下来的组数.
    接下来每 T 行,开始给出一个数组 N(1<=N<=100000), 接着跟着N个数字(all the integers are between -1000 and 1000).

    Output
    输出最大的字段和

    Sample Input
    2
    5 6 -1 5 4 -7
    7 0 6 -1 1 -6 7 -5

    Sample Output
    14
    7

    经典的DP:

    状态转移方程: dp[i] = max{ d[i-1] + num[i] ,  num[i] };

    代码
    #include<stdio.h>
    int main()
    {
    int n, m, i, k, max, dp[100001], num[100001];;
    while(scanf("%d", &n) != EOF)
    {
    for(i=1; i<=n; i++)
    {
    scanf(
    "%d", &m);
    for(k=0; k<m; k++)
    scanf(
    "%d", &num[k]);
    dp[
    0] = num[0];
    for(k=1; k<m; k++)
    if(dp[k-1] <= 0) /*即dp[k-1] + num[k] <= num[k]*/
    dp[k]
    = num[k];
    else
    dp[k]
    = dp[k-1] + num[k];
    max
    = dp[0];
    for(k=1; k<m; k++)
    if(max < dp[k])
    max
    = dp[k];
    printf(
    "%d\n", max);
    }
    }
    return 0;
    }
  • 相关阅读:
    JS学习之旅2
    JS学习之旅1
    Stack 栈
    Linked List 链表
    Array 数组
    时间/空间复杂度
    What/Why/How
    Https 握手过程
    JS跨域解决方案
    JS 的内存管理-GC
  • 原文地址:https://www.cnblogs.com/submarinex/p/1941259.html
Copyright © 2011-2022 走看看