백준 2156 c++

magicdrill·2024년 3월 5일

백준 문제풀이

목록 보기
101/673

백준 2156 c++

#include <iostream>
#include <algorithm>

using namespace std;

int input(int lower, int upper)
{
	//cout << "input()" << endl;
	int A;

	while (1)
	{
		cin >> A;
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

void input_arr(int* wine, int n)
{
	int i;
	for (i = 0; i < n; i++)
	{
		wine[i] = input(0, 1000);
	}

	return;
}

int find_result(int *wine, int n)
{
	int i, result = 0;
	int* DP = new int[n + 2];

	DP[0] = wine[0];
	DP[1] = wine[0] + wine[1];
	DP[2] = max(DP[1], max(DP[0] + wine[2], wine[1] + wine[2]));
	for (i = 3; i < n; i++)
	{
		DP[i] = max(DP[i - 1], max(DP[i - 3] + wine[i - 1] + wine[i], DP[i - 2] + wine[i]));
	}
	//for (i = 0; i < n; i++)
	//{
	//	cout << DP[i] <<" ";
	//}
	//cout << endl;
	result = DP[n-1];
	delete[] DP;

	return result;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, i;
	int *wine;

	n = input(1, 10000);
	wine = new int[n];
	input_arr(wine, n);
	cout << find_result(wine, n) << "\n";
	
	delete[] wine;

	return 0;
}

0개의 댓글