zoukankan      html  css  js  c++  java
  • max Sum(简单动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003
    /*
    给组测试数据
    1
    7
    2 3 -4 -5 6 7 8
    一个关键问题 : 什么时候将开始位置重新赋值
    即当连续序列和小于等于零时
    */

    include<stdio.h>

    int main()
    {
    int t;
    scanf("%d",&t);
    int k=1;
    while(t--)
    {
    int n;
    scanf("%d",&n);
    int m,max1=-0x3f3f3f3f,start=1,end=1;
    int dp=0,temp=1;
    for(int i=1; i<=n; i++)
    {
    scanf("%d",&m);
    dp+=m;
    if(dp<0)//此时将开始位置重新赋值
    {
    temp=i+1;//dp是从0开始的 加上一个数仍然小于0 显然这是一个负数 开始位置不能从此开始 至少要从下一个开始
    dp=0;//连续序列和又重0开始了
    }
    if(dp>max1)//比上一个连续序列和大的情况
    {
    max1=dp;
    start=temp;
    end=i;
    }
    }
    printf("Case %d: %d %d %d ",k++,max1,start,end);
    if(t)printf(" ");//最后一行只有一个换行
    }
    return 0;
    }

    梦里不知身是客,一晌贪欢。
  • 相关阅读:
    rpc
    route
    ROLLBACK
    rmdir -删除空目录
    rm
    rlogin
    REVOKE
    resolver
    RESET
    repquota
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/5364356.html
Copyright © 2011-2022 走看看