DIAMONDPATH 시간초과 뜨는데 어떻게 해야할지 모르겠어요.

  • 박태우
    박태우

    ##코드

    #include <iostream>
    using namespace std;
    
    int final=0;
    int n;
    
    void search(int **arr,int f,int s,int count,int sum)
    {
        sum+=arr[f][s];
    
        if(f==2*n-2) //마지막 숫자에 도달했을 때
        {
            if(final < sum)final = sum; 
            return;
        }
    
        if(f<n-1)
        {
            search(arr,f+1,s,count,sum);
            search(arr,f+1,s+1,count,sum);
        }
        else // 역삼각형 모양일때
        {
            if(s==0) search(arr,f+1,s,count,sum);
            else if(s==f-(2*count))
            {
                search(arr,f+1,f+1-(2*(count+1)),count+1,sum);
            }
            else
            {
                search(arr,f+1,s-1,count+1,sum);
                search(arr,f+1,s,count+1,sum);
            }
        }
    }
    
    int main()
    {
        int cases=0;
        cin >> cases;
        for(int i=0; i<cases; i++)
        {
            int count=1;
            final=0;
    
            cin >> n;
    
            int **arr= new int*[2*n-1];
    
            for(int j=0; j<2*n-1; j++) //다이아몬드 입력
            {
                if(j<n)
                {
                    arr[j] = new int[j+1];
                    for(int k=0; k<j+1; k++)
                    {
                        cin>>arr[j][k];
                    }
                }
                else
                {
                    arr[j] = new int[j-(2*count-1)];
                    for(int k=0; k<j-(2*count-1); k++)
                    {
                        cin>>arr[j][k];
                    }
                    count++;
                }
            }
    
            search(arr,0,0,0,0);
    
            cout<<final<<endl;
    
        }
    }
    

    다이아몬드에서 하나의 숫자를 들어갈 때마다 재귀함수를 호출하도록 코드를 짰는데요

    시간초과가 뜨네요ㅜㅜ


    8년 전
1개의 댓글이 있습니다.
  • jseo
    jseo

    이 경우에 완전탐색은 지수시간이 걸리기 때문에 제한시간안에 들어올수 없습니다. 동적계획법 + 메모이제이션에 대해서 공부해보세요.


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.