어렵지 않은 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 |