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 이 경우에 완전탐색은 지수시간이 걸리기 때문에 제한시간안에 들어올수 없습니다. 동적계획법 + 메모이제이션에 대해서 공부해보세요. 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
박태우
##코드
다이아몬드에서 하나의 숫자를 들어갈 때마다 재귀함수를 호출하도록 코드를 짰는데요
시간초과가 뜨네요ㅜㅜ
8년 전