728x90
시간 제한 : 2초
메모리 제한 : 512MB
입력
첫째 줄에 N (1 ≤ N ≤ 15)이 주어진다.
둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 5, 1 ≤ Pi ≤ 1,000)
출력
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
소스코드
#include <iostream> #include <vector> using namespace std; int main(void) { pair<int, int> arr[16] = { {0,0}, }; int dp[16] = { 0, }, n; cin >> n; for (int i = 0; i < n; i++) cin >> arr[i].first >> arr[i].second; for (int i = 0; i < n; i++) { if (dp[i] > dp[i + 1]) dp[i + 1] = dp[i]; if (dp[i + arr[i].first] < dp[i] + arr[i].second) dp[i + arr[i].first] = dp[i] + arr[i].second; } cout << dp[n]; }
Tip
DP로 풀면 되는데, 초반 접근을 잘못해서 고생을 많이 했다. 막상 식을 세우고 보면 간단한 문제.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 1356 - 유진수 (0) | 2018.04.23 |
---|---|
백준] 2458 - 키 순서(KOI 2011 지역본선) (0) | 2018.04.22 |
백준] 5212 - 지구 온난화(COCI 2012/2013) (0) | 2018.04.20 |
백준] 11403 - 경로 찾기 (0) | 2018.04.18 |
백준] 13699 - 점화식(홍익대학교 프로그래밍 경진대회 2016) (0) | 2018.04.17 |