본문 바로가기
C++ 코딩 문제 풀이/백준

[Baekjoon] 16493번: 최대 페이지 수

by 섬댕이 2023. 8. 8.

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

 

16493번: 최대 페이지 수

첫째 줄에 N(1 ≤ N ≤ 200)과 챕터의 수 M(1 ≤ M ≤ 20)이 주어진다. 둘째 줄부터 각 챕터 당 읽는데 소요되는 일 수와 페이지 수가 주어진다. 소요되는 일 수는 20보다 작거나 같은 자연수이고, 페이

www.acmicpc.net

 


 

문제 해결 과정

착안

이전 포스트에서와 동일한 원리로, 동적계획법(dynamic programming)에 기반하여 문제를 해결하였다.

 

구현

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <iostream>
#include <algorithm>

using namespace std;

struct Chapter
{
	int Days;
	int Pages;
};

Chapter Chapters[20];
int DP[201];

int main()
{
	int N, M;
	cin >> N >> M;

	for (int i = 0; i < M; i++)
		cin >> Chapters[i].Days >> Chapters[i].Pages;

	for (int i = 0; i < M; i++)
		for (int m = N; m >= Chapters[i].Days; m--)
			if (m == Chapters[i].Days || DP[m - Chapters[i].Days] > 0)
			{
				int valueSum = DP[m - Chapters[i].Days] + Chapters[i].Pages;
				if (DP[m] < valueSum)
					DP[m] = valueSum;
			}

	cout << *max_element(DP, DP + N + 1) << "\n";
	return 0;
}

 

실행 결과

'C++ 코딩 문제 풀이 > 백준' 카테고리의 다른 글

[Baekjoon] 14502번: 연구소  (0) 2023.08.15
[Baekjoon] 17179번: 케이크 자르기  (0) 2023.08.14
[Baekjoon] 12865번: 평범한 배낭  (0) 2023.08.01
[Baekjoon] 1629번: 곱셈  (0) 2023.07.31
[Baekjoon] 13305번: 주유소  (0) 2023.07.28

댓글