티스토리 뷰
#include <stdio.h>
int dp[16] = {};
int main(void) {
int n=0;
scanf("%d", &n);
for(int i=0; i<=n; i++) { //가장 돈을 많이 버는 경우를 구하기
if(i>0) if(dp[i] < dp[i-1]) dp[i]=dp[i-1]; //바로 전 보다, 돈을 더 적게 번다면, 전 껄로 바꾼다.
if(n==i) break;
int t, p; //걸린 시간, 얻는 돈
scanf("%d %d", &t, &p); //입력
if(t+i > n) continue; //퇴직날을 초과 하면, 상담이 불가하므로, 스킵한다.
if(dp[i+t] < dp[i]+p) dp[i+t] = dp[i]+p; //걸린 시간 + 상담 한 시간 에서 얻는 돈이 지금 경우가 더 클 경우 바꾸어 준다.
}
printf("%d", dp[n]);
}
풀이 : dynamic programing
상담하는 시간을 고려하며, 걸리는 시간과, 얻는 돈을 입력 받은 다음에, 상담하는 시간 + 걸리는 시간에 걸리는 얻는 돈을 dp[]에 저장한다. dp[]에 저장 할 때는 더 큰 것을 저장한다.
또한 날짜를 증가시키면서, 그 날짜까지 벌 수있는 돈 (dp[])의 최댓값을 구해놓는다. 이를 위해선, 그 전날 의 dp[]와 비교하여, 전 것이 더 크면, 전 것을 대입, 아니면, 그대로 둔 다. (이걸 안하면, 최댓값을 구할 수 가 없다) (일을 안 하는 날이 있을 수도 있다)
https://www.acmicpc.net/problem/14501
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 9567번 돌 게임3 (백준) (2) | 2023.01.20 |
---|---|
c언어 2436번 공약수 (백준) (0) | 2023.01.18 |
c언어 2617번 구슬 찾기 (백준) (0) | 2023.01.03 |
c언어 14938번 서강그라운드 (백준) (0) | 2023.01.03 |
c언어 23286번 허들 넘기 (백준) (0) | 2023.01.03 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 누적합
- 카드
- 최소 스패닝 트리
- java
- 덱
- DFS
- union
- 6198
- Mo.s
- 6198번
- 트리
- C언어
- Krustal
- 정렬
- 16120번
- 그리디
- 1835
- 그래프
- 플로이드
- find
- 1835번
- 누적 합
- DP
- 최대공약수
- 세그먼트 트리
- 스택
- BFS
- 백준
- 오프라인 쿼리
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함