zoukankan      html  css  js  c++  java
  • hdu 1003 Max Sum 果枫

    题意:输出最大子序列和。

    解法:DP

    ac代码:

    #include<iostream>
    using namespace std;
    
    #define mem(x,y) memset(x,y,sizeof(x));
    const int M=100099;
    
    int a[M];//存储输入的数
    int sum[M];//sum[i]代表第i个为结尾的最大和
    int front[M];//front[i]代表以i为结尾的最大子串和的起始位置
    
    int main()
    {
        int t;
        cin>>t;
        int l=1;
        while(t--)
        {
            mem(sum,0);mem(front,0);
    
            int i,j;
            int n;
        
            cin>>n;    
            for(i=1;i<=n;i++)
                cin>>a[i];
    
            sum[1]=a[1];front[1]=1;
            int k,max;
            k=1;max=sum[1];
                
    
            for(i=2;i<=n;i++)//精华所在,建议慢慢模拟
            {
                if(sum[i-1]>=0)
                {
                    front[i]=front[i-1];
                    sum[i]=sum[i-1]+a[i];
                }
                else
                {
                    sum[i]=a[i];
                    front[i]=i;
                }
                if(max<sum[i])
                {
                    k=i;
                    max=sum[i];
                }
            }
    
            printf("Case %d:\n",l++);
            printf("%d %d %d",max,front[k],k);
    
            if(t!=0)//亢爹,最后一组数据不需输出多一个空行
                printf("\n\n");
                
        }
        printf("\n");
        return 0;
    }
    /*
    5 6 -1 5 4 -7
    7 0 6 -1 1 -6 7 -5
    4 3 -1 -2 -2
    */
  • 相关阅读:
    微服务架构
    微服务架构
    Java语言编程
    Java语言编程
    Java语言编程
    《自己动手写云盘》 – 确立需求
    树上差分
    线性基
    BM(Berlekamp-Massey)算法
    FFT/FWT
  • 原文地址:https://www.cnblogs.com/zgfailmr/p/2673561.html
Copyright © 2011-2022 走看看