connecting the dots
[삼성 기출/C++] 14501번 : 퇴사 본문
문제
풀이
DP사용. DFS로 푸는 사람도 많았다.
날짜를 1에서 시작하는 것보다 N에서 시작하는게 코드 구현이 더 간단하다.
경우
1. 날짜 i에 상담을 진행한 경우 -> dp[i]=dp[i+t[i]]+p[i]
2. 날짜 i에 상담을 진행하지 않은 경우 -> dp[i]=dp[i+1]
22번째 line에서 dp[i]=0; 로 작성해서 틀렸었다.
나와있는 테스트케이스는 모두 맞췄는데, 다른 부분에서 조건이 위배됐나 봄..
코드
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
32
33
|
#include <stdio.h>
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int dp[20]={0};
int n;
int t[16], p[16];
scanf("%d", &n);
for(int i=1;i<=n;i++){
scanf("%d %d", &t[i], &p[i]);
}
for(int i=n;i>0;i--){
if(i+t[i]-1>n) {dp[i]=dp[i+1];}
else{
dp[i]=max(dp[i+t[i]]+p[i],dp[i+1]);
}
}
printf("%d", dp[1]);
}
|
cs |
'algorithm > SWEA' 카테고리의 다른 글
[SWEA/Java] 1247 : 최적경로 (0) | 2021.02.18 |
---|---|
[SWEA/Java] 1974 : 스도쿠 검증 (0) | 2021.02.10 |
[SWEA / Java] 1861 : 정사각형 방 (0) | 2021.02.08 |
[SWEA / Java] 1208 : Flatten (0) | 2021.02.07 |
[SWEA / Java] 1210 : Ladder1 (0) | 2021.02.07 |