connecting the dots

[삼성 기출/C++] 14501번 : 퇴사 본문

algorithm/SWEA

[삼성 기출/C++] 14501번 : 퇴사

林 : 2020. 12. 20. 08:54

문제

 

풀이

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