본문 바로가기
백준BOJ/동적 계획법

백준 9461 파도반 수열, 연속합 1912

by 이일아 2022. 6. 9.
반응형

https://www.acmicpc.net/problem/9461

 

9461번: 파도반 수열

오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의

www.acmicpc.net

 

 

 

EXPLANATION

6번째 삼각형부터 바로 이전 삼각형과 5번 이전 삼각형의 넓이랑 같다.

3 = 2 + 1

4 = 3 + 1

5 = 4 + 1

7 = 5 + 2

.

.

.

 

CODE

#include <iostream>

using namespace std;

long long P[101] = {0,1,1,1,2,2};    //for [1, N]

int main(void){
	int T;
	cin >> T;
	for(int i = 0; i < T; i++){
		int N;
		cin >> N;
		for(int i = 6; i <= N; i++){
			P[i] = P[i - 1] + P[i - 5];
		}
		cout << P[N] << "\n";	
	}

	return 0;
}

 

 

 

 

https://www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

 

 

EXPLANATION

 

수열에서 각 index i마다

이 index 이전의 어떤 index부터 이 index까지 연속해서 더했을 때 가장 커지는 값,

즉, 그 index부터 내려가면서 연속해서 더했을 때 가장 커지는 값을 구한다.

그것을 dp[i]라고 하자.

 

dp[i]를 구하는 법:

dp[0]은 어차피 자신보다 앞에 차례가 없으니 그대로 dp[0] = arr[0]

dp[1]부터는 자신의 원소 혼자만 더한 것과, 이전의 어떤 index로 부터 직전의 index까지의 연속해서 더했을 때 가장 커지는 값 dp[i - 1]에 자신의 원소를 더한 것을 비교해서 더 큰 값으로 갱신.

 

그리고 그 dp[i]들 중에서 최댓값을 구하면된다.

 

 

ex)

10 -4 3 1 5 6 -35 12 21 -1

 

index i arr[i] dp[i] = (index i 부터 연속해서 더했을 때 가장 큰 값)
0 10 10
1 -4 6
2 3 9
3 1 10
4 5 15
5 6 21
6 -35 -14
7 12 12
8 21 33
9 -1 32

dp[i]의 최댓값 dp[8]의 33이 답.

 

 

 

CODE

#include <iostream>
#include <algorithm>
#define MAX 100000
using namespace std;
int arr[MAX], dp[MAX]={};
int main() {
    int n;
    cin>>n;
    for(int i=0; i<n; i++) {
        cin>>arr[i];
    }
    for(int i=0; i<n; i++) {
        dp[i]=max(arr[i], dp[i-1]+arr[i]);    //arr[i]자신의 원소 혼자만 더한 것과, 이전의 어떤 index로 부터 직전의 index까지의 연속해서 더했을 때 가장 커지는 값 dp[i - 1]에 자신의 원소를 더한 것을 비교해서 더 큰 값으로 갱신  
    }
    sort(dp, dp + n);    //dp[i]를 오름차순으로 나열하면 맨 마지막이 최댓값
    cout << dp[n-1] << "\n";
   
    return 0;
}

 

반응형

'백준BOJ > 동적 계획법' 카테고리의 다른 글

백준 1932 정수 삼각형  (0) 2022.06.10
백준 1149 RGB거리  (0) 2022.06.09
백준 1904 01타일  (0) 2022.06.08
백준 9184 신나는 함수 실행  (0) 2022.06.08
백준 24416 알고리즘 수업 - 피보나치 수 1  (0) 2022.06.08

댓글