zoukankan      html  css  js  c++  java
  • 今天农夫布置的DP题

    水了三道水DP题 最大M字段和的O(n)算法想了恩久没想出来.....

    hit1760
    #include<stdio.h>
    #include
    <string.h>

    int main()
    {
        
    int n;
        
    while(scanf("%d"&n)==1 && n)
        
    {
            
    int hold=0, mxa=0;
            
    int i, Num;
            
    for(i=0; i<n; i++)
            
    {
                scanf(
    "%d"&Num);
                mxa
    =mxa>hold+Num ? mxa : hold+Num;
                hold
    =hold+Num>0 ? hold+Num : 0;
            }

            
    if(mxa>0)printf("The maximum winning streak is %d.\n",mxa);
            
    else printf("Losing streak.\n");
        }

        
    return 0;
    }

    PKU2479
    #include<stdio.h>
    #include
    <string.h>

    int t, n;
    int num[50010], mxa1[50010], mxa2[50010], hold, mxa;

    int main()
    {

        scanf(
    "%d"&t);
        
    while(t--)
        
    {
            scanf(
    "%d"&n);
            
    int i;
            mxa
    =0;
            hold
    =0;
            
    for(i=0; i<n; i++)
            
    {
                scanf(
    "%d"&num[i]);

                
    if(i==0 || mxa1[i-1]<=hold+num[i])    mxa1[i]=hold+num[i];
                
    else if(i>0) mxa1[i]=mxa1[i-1];

                
    if(hold+num[i]<=0)    hold=0;
                
    else hold+=num[i];
            }

            hold
    =0;
            
    for(i=n-1; i>=0; i--)
            
    {
                
    if(i==n-1 || mxa2[i+1]<=hold+num[i])    mxa2[i]=hold+num[i];
                
    else if(i<n-1) mxa2[i]=mxa2[i+1];

                
    if(hold+num[i]<=0)    hold=0;
                
    else hold+=num[i];

                
    if(i>0 && i<n-1 && mxa<mxa1[i]+mxa2[i+1|| i==n-2)    
                    mxa
    =mxa1[i]+mxa2[i+1];
            }

            printf(
    "%d\n", mxa);
        }


        
    return 0;
    }

    HDU1003

    #include<stdio.h>
    #include
    <string.h>




    int main()
    {
        
    int t, k;
        scanf(
    "%d"&t);
        
    for(k=1; k<=t; k++)
        
    {
            
    int n;
            scanf(
    "%d"&n);
            
    int i, num, mxa=0, hold=0, ib=0, ie=0, ihb=0;
            
    for(i=0; i<n; i++)
            
    {
                scanf(
    "%d"&num);
                
    if(i==0 || mxa<hold+num) mxa=hold+num, ib=ihb, ie=i;
                
    if(hold+num<0) hold=0, ihb=i+1;
                
    else hold+=num;
            }

            printf(
    "Case %d:\n", k);
            printf(
    "%d %d %d\n", mxa, ib+1, ie+1);
            
    if(k!=t)printf("\n");
        }


        
    return 0;

    }
  • 相关阅读:
    Linux下替换默认版本的protobuf
    论文笔记——NEURAL ARCHITECTURE SEARCH WITH REINFORCEMENT LEARNING
    kafka 学习之初体验
    git命令01
    git 命令02
    SSH远程连接连接其他主机,等待时间过长的原因。
    lsof命令详解
    文本处理命令
    Windows Server 2008 远程桌面连接拒绝
    vim文本编辑工具—修改文件内容
  • 原文地址:https://www.cnblogs.com/SQL/p/925446.html
Copyright © 2011-2022 走看看