$O(n^2)$
dp[i][j]: i~n번째 날에 쿠폰 j개를 가지고 가능한 리조트에 모두 입장하기 위한 비용의 최솟값
#include<cstdio> #include<algorithm> using namespace std; int ck[101], dp[101][40], n, m, x; int f(int d, int c) { if (d > n) return 0; if (dp[d][c] < 0) dp[d][c] = ck[d] ? f(d + 1, c) : min({ c > 2 ? f(d + 1,c - 3) : f(d + 1,c) + 10000,f(d + 3,c + 1) + 25000,f(d + 5,c + 2) + 37000 }); return dp[d][c]; } int main() { for (scanf("%d%d", &n, &m); m--;) scanf("%d", &x), ck[x] = 1; fill(dp[0], dp[101], -1); printf("%d", f(1, 0)); return 0; }
혹시 쓰신 풀이를 자세히 설명가능할까요? 코드를봐도 왜그렇게 쓰게된지를 모르겠네요ㅠ
답글삭제혹시 쓰신 풀이를 자세히 설명가능할까요? 코드를봐도 왜그렇게 쓰게된지를 모르겠네요ㅠ
답글삭제https://www.digitalculture.or.kr/koi/selectOlymPiadDissentList.do
삭제2016 고등부 전국본선 1번 풀이를 보시면 됩니다.