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 |
댓글