fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 8973 (C++) 수학 공책
최초 업로드: 2025-10-23 12:35:51
최근 수정 시간: 2025-10-23 12:35:51
게시자: rlatjwls3333
카테고리: 백준
조회수: 9
# [Gold IV] 수학 공책 [문제 링크](https://www.acmicpc.net/problem/8973) ## 문제 설명 <p>창영이의 수학 공책에는 길이가 N이고 정수로 이루어진 수열 두 개가 적혀져 있다. 두 수열의 흐릿함을 계산하려면, 두 번째 수열을 뒤집은 다음, 같은 위치에 있는 두 수의 곱을 더해야 한다.</p> <table class="table table-bordered table-center-30 td-center"> <tbody> <tr> <td>3</td> <td>-4</td> <td>-3</td> <td>-2</td> <td>2</td> <td>0</td> </tr> <tr> <td>-3</td> <td>0</td> <td>5</td> <td>-1</td> <td>3</td> <td>2</td> </tr> </tbody> </table> <p>예를 들어, 위의 두 수열의 흐릿함은 3×2 + (-4)×3 + (-3)×(-1) + (-2)×5 + 2×0 + 0×(-3) = -13 이다.</p> <p>창영이는 앞에서부터 B개, 뒤에서부터 E개를 지워서 두 수열의 흐릿함을 되도록 크게 만들려고 한다. B와 E는 0일 수도 있으며, 수를 지울 때는 두 수열에서 동시에 지워야 한다.</p> <p>흐릿함을 가장 크게 만들려면, B와 E가 몇이 되어야 하는지 구하는 프로그램을 작성하시오.</p> ## 입력 <p>첫째 줄에 수열의 길이 N (1 ≤ N ≤ 2000)이 주어진다.</p> <p>다음 두 줄에 걸쳐서 두 수열이 주어진다. 모든 숫자는 -1000보다 크거나 같고, 1000보다 작거나 같다.</p> ## 출력 <p>첫째 줄에 B와 E를 출력한다. (0 ≤ B, E < N, B+E < N)</p> <p>둘째 줄에는 흐릿함의 최댓값을 출력한다.</p> <p>흐릿함을 최대로 만드는 B와 E가 여러 가지인 경우에는 아무거나 출력한다.</p> ## 풀이 브루트포스로 N³에 확인했습니다. ``` c++ #include<bits/stdc++.h> using namespace std; int arr[2][2000]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i=0;i<2;i++) for(int j=0;j<n;j++) cin >> arr[i][j]; int b=0, e=0, res=INT_MIN; for(int i=0;i<n;i++) { for(int j=0;i+j<n;j++) { int cur=0; for(int k=0;k<n-i-j;k++) cur += arr[0][i+k]*arr[1][n-1-(j+k)]; if(cur>res) { res=cur; b=i; e=j; } } } cout << b << ' ' << e << '\n' << res; } ```