Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 17953 디저트 본문

Programming/BOJ

[백준/BOJ] 17953 디저트

he1fire 2020. 9. 25. 01:32
728x90

문제 : 17953 디저트

 

17953번: 디저트

창호는 매일 점심마다 디저트를 먹는다. 그런데 같은 디저트라도 매일 느끼는 맛이 달라진다. 어떤 날에는 마카롱을 먹고 매우 행복함을 느끼는 반면 어떤 날에는 ‘차라리 케이크를 먹는게 나�

www.acmicpc.net

각 날마다 디저트가 주는 만족감이 주어질 때, 최대로 얻을 수 있는

만족감을 출력하는 문제이다.

날짜를 N, 디저트의 종류를 M이라 할 때 그냥 모든 경우의 수를 구하면

O(M^N)이므로 당연히 시간 초과가 난다.

DP 배열을 만들어 전날까지의 만족감 중 최대를 골라 계속 갱신해주면 

O(N*M^2)로 시간제한 안에 해결할 수 있다.


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N, M, arr[15][100005], DP[15][100005], ans;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N >> M;
    for (int i=1;i<=M;i++){
        for (int j=1;j<=N;j++){
            cin >> arr[i][j];
        }
    }
    for (int i=1;i<=N;i++){
        for (int j=1;j<=M;j++){
            ll tmp=0;
            for (int k=1;k<=M;k++){
                if (i!=1 && j==k)
                    tmp=max(DP[k][i-1]+arr[j][i]/2,tmp);
                else
                    tmp=max(DP[k][i-1]+arr[j][i],tmp);
            }
            DP[j][i]=tmp;
        }
    }
    for (int i=1;i<=M;i++)
        ans=max(DP[i][N],ans);
    cout << ans;
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 9370 미확인 도착지  (0) 2020.09.26
[백준/BOJ] 1753 최단경로  (0) 2020.09.26
[백준/BOJ] 15724 주지수  (0) 2020.09.24
[백준/BOJ] 1342 행운의 문자열  (0) 2020.09.24
[백준/BOJ] 14499 주사위 굴리기  (0) 2020.09.23
Comments