hdu 1003 (상세 설명) 자바

8153 단어 자바
알고리즘 분석:
일렬 수  a[0],a[1],……a[i]……
정의 배열 b [0], b [1,]... b [i]...
* * * b [i] i 이전의 임 의 위치 에서 i 의 최대 연속 과!!!
b[i]=max{b[i-1]+a[i],a[i]}
package Main;



import java.util.Scanner;



public class Main {

    public static void main(String[] args)

    {

        int _case,n,i;

        int []a=new int [100100];

        int []b=new int [100100];//dp

        int []c=new int [100100];//    

        Scanner cin=new Scanner(System.in);

        _case=cin.nextInt();

        int js=0;

        while(_case-->0)

        {

            js++;

            n=cin.nextInt();

            for(i=0;i<n;i++)

            {

                a[i]=cin.nextInt();

            }

            b[0]=a[0];

            c[0]=0;

            for(i=1;i<n;i++)

            {

                if(b[i-1]+a[i]<a[i])

                {

                    b[i]=a[i];

                    c[i]=i;

                }

                else 

                {

                    b[i]=b[i-1]+a[i];

                    c[i]=c[i-1];

                }

            }

            int ed=0;

            int max=b[0];

            for(i=1;i<n;i++)

            {

                if(max<b[i])

                {

                    max=b[i];

                    ed=i;

                }

            }

            System.out.println("Case "+js+":");

                System.out.println(max+" "+(c[ed]+1)+" "+(ed+1));

            if(_case>0)System.out.println();

        }

    }

}

출력 형식 주의, Output a blank line between two cases.
#include<stdio.h>

int a[100100];

int b[100100];

int c[100100];

int main()

{

    int _case,n,i;

    scanf("%d",&_case);

    int js=0;

    while(_case--)

    {

        js++;

        scanf("%d",&n);

        for(i=0;i<n;i++)

            scanf("%d",&a[i]);

        b[0]=a[0];

        c[0]=0;

        for(i=1;i<n;i++)

        {

            if(b[i-1]+a[i]<a[i])

            {

                c[i]=i;

                b[i]=a[i];

            }

            else

            {

                c[i]=c[i-1];

                b[i]=b[i-1]+a[i];

            }

        }

        int ed=0,max=b[0];

        for(i=1;i<n;i++)

        {

            if(max<b[i])

            {

                max=b[i];

                ed=i;

            }

        }

        printf("Case %d:
",js); printf("%d %d %d
",max,c[ed]+1,ed+1); if(_case>0)printf("
"); } return 0; }

좋은 웹페이지 즐겨찾기