FENCE 문제.. skan1543 [[problem:FENCE]] 분할정복알고리즘으로.. 중앙을 기준으로 왼쪽부분, 오른쪽부분 사각형의 최대 넓이 중앙에서 퍼져나가는 사각형의 최대넓이.. 이렇게 3가지를 비교해서 답을 구하는 방식으로 풀었습니다. 알고리즘 문제 해결 전략의 답안 소스를 봐도 제 소스랑 다른바가 없던데.. 왜 오답이 나는지 잘 모르겠네요 ㅠㅠ #include<iostream> using namespace std; int length; int height[20001]={0,}; int process(int x,int y) { int mid=(x+y)/2; if(y-x==1 || y==x) { if(height[x]>height[y]) return height[y]*(y-x+1); return height[x]*(y-x+1); } int left=process(x,mid); int right=process(mid+1,y); int i,j; int min=30000; int max=height[mid]; for(i=mid,j=mid;i>=x,j<=y;) { if(height[i-1] > height[j+1]) i--; else j++; if(min>height[i]) min=height[i]; if(min>height[j]) min=height[j]; if(max<min*(j-i+1)) max=min*(j-i+1); } if(left>right) right=left; if(right>max) return right; else return max; } int main( ) { int T; for(cin >> T;T--;){ cin >> length; for(int i=1;i<=length;i++) scanf("%d",&height[i]); cout << process(1,length) << endl; } return 0; } 12년 전
1개의 댓글이 있습니다. Kureyo j+1이 [0,20001)을 넘을것같네요 12년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
skan1543
[[problem:FENCE]]
분할정복알고리즘으로..
중앙을 기준으로 왼쪽부분, 오른쪽부분 사각형의 최대 넓이
중앙에서 퍼져나가는 사각형의 최대넓이.. 이렇게 3가지를 비교해서 답을 구하는 방식으로 풀었습니다.
알고리즘 문제 해결 전략의 답안 소스를 봐도 제 소스랑 다른바가 없던데.. 왜 오답이 나는지 잘 모르겠네요 ㅠㅠ
12년 전