N개의 앱이 작동중일 때 M만큼의 메모리를 확보하려 할 때 앱 비활성화 비용의 최소값을 구하는 문제다.
dp를 d[N][M]로 잡으면 10억이므로 메모리 초과가 난다. 그렇기 때문에 d[N][s] 로 생각 한다.
앱 비활성화 비용의 합이 s일 때 확보할 수 있는 최대 메모리값을 저장하는 것이다.
<코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> #include <algorithm> using namespace std; int a[101], b[101], n, m, d[10001], sum, i, j; int main() { scanf("%d%d", &n, &m); for (i = 0; i < n; i++) scanf("%d", &a[i]); for (i = 0; i < n; i++) scanf("%d", &b[i]), sum += b[i]; for (i = 0; i < n; i++) for (j = sum; j >= b[i]; j--) { d[j] = max(d[j], d[j - b[i]] + a[i]); } for (i = 0; i < sum && d[i] < m; i++); printf("%d\n", i); return 0; } | cs |
'BOJ' 카테고리의 다른 글
14648 쿼리 맛보기 (0) | 2017.10.03 |
---|---|
8068 Water (0) | 2017.10.03 |
6679 싱기한 네자리 숫자 (0) | 2017.10.03 |
2959 거북이 (0) | 2017.10.03 |
1874 스택수열 (0) | 2017.10.03 |