티스토리 뷰

오늘의 문제!

https://www.acmicpc.net/problem/11052

입력

첫째 줄에 N이 주어짐

둘째 줄에 N개의 Pi가 주어짐

풀이

기존에 풀었던 dp문제 중 가장 기본적인 틀 형식으로 풀었다

카드가 최종 장수가 되면 리턴, 전체 카드팩의 종류를 다 확인하면 -1을 리턴
처음 result는 현재 카드팩을 구매하지 않고 다음 카드팩을 확인
두번째 result는 현재 카드팩을 구매하고 다시 확인

소스

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
34
35
36
37
38
39
 
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
 
int N;
int P[1001];
int dp[1001][1001];
 
int func(int index, int n){
    if(n==N){ //최대 카드 장수 획득
        return 0;
    }
    if(index==N+1){ //끝까지 도달 했는데 최대 카드 장수를 만들지 못함
        return -1;
    }
    
    if(dp[index][n] != 0){
        return dp[index][n];
    }
    int result = func(index+1,n); //현재 카드팩 패스
    if(N-n>=index){
        result = max(result,func(index,n+index)+P[index]);
    }
    
    dp[index][n] = result;
    return result;
}
 
int main(void){
    scanf("%d",&N);
    for(int n=1;n<=N;n++){
        scanf("%d",&P[n]);
    }
    printf("%d",func(1,0));
    return 0;
}
 
cs
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함