어렵지 않은 DP 문제
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <math.h> #include <queue> #include <set> #include <list> #include <utility> #include <functional> #define maxi 10005 using namespace std; int n,m,c[105],dp[10005]; int main(void) { fill_n(&dp[0], maxi, maxi); scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) scanf("%d", &c[i]); dp[0] = 0; for (int i = 0; i <= m; i++) { if (dp[i] != maxi) { for (int k = 0; k < n; k++) { if (i + c[k] <= maxi && dp[i + c[k]] > dp[i] + 1) dp[i + c[k]] = dp[i] + 1; } } } if (dp[m] == maxi) printf("-1"); else printf("%d", dp[m]); return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 2449 전구 *** (0) | 2018.06.01 |
---|---|
백준(BOJ) 1026 보물섬 ** (0) | 2018.06.01 |
백준(BOJ) 2159 케익 배달 ** (0) | 2018.06.01 |
백준(BOJ) 1727 커플 만들기 ** (0) | 2018.06.01 |
백준(BOJ) 2342 DDR ** (0) | 2018.06.01 |