Recent Posts
Notice
No Rules Rules
앱 (feat. 백준, 7579번) 본문
728x90
반응형
앱
https://www.acmicpc.net/problem/7579
7579번: 앱
입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활
www.acmicpc.net
반응형
// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(NULL);
register int N, M, sum = 0, ans = 0;
int A[101]{ 0 }, c[101]{ 0 }, dp[101][100 * 100 + 1]{ 0 };
cin >> N >> M;
for (register int n = 1; n <= N; ++n)
cin >> A[n];
for (register int n = 1; n <= N; ++n)
cin >> c[n], sum += c[n];
for (register int i = 1; i <= N; ++i)
for (register int j = 0; j <= sum; ++j){
if (j - c[i] >= 0)
dp[i][j] = max(dp[i][j], dp[i - 1][j - c[i]] + A[i]);
dp[i][j] = max(dp[i][j], dp[i - 1][j]);
}
while (true)
if (dp[N][ans++] >= M)
break;
cout << ans - 1;
return 0;
}
// *&)*@*
- N개의 앱과 메모리 바이트를 2차원 배열 형태로 dp를 생성합니다. 그리고 dp의 값은 메모리 값 입니다. (dp[0][0] = 메모리값)
- 1 ≤ N ≤ 100 이므로 dp[101], 0 ≤ c1, ..., cN ≤ 100 이므로 dp[100 * 100 + 1]. 즉, dp[101][100 * 100 + 1] 이 총 크기가 됩니다.
- 예제를 dp로 표현하면 아래와 같습니다.
dp[i][j] = max(dp[i][j], dp[i - 1][j - c[i]] + A[i]) 가 dp 계산의 핵심입니다.
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
랜선 자르기 (feat. 백준, 1654번) (0) | 2022.08.17 |
---|---|
수 찾기 (feat. 백준, 1920번) (0) | 2022.08.17 |
팰린드롬? (feat. 백준, 10942번) (0) | 2022.08.17 |
양팔저울 (feat. 백준, 2629번) (0) | 2022.08.17 |
행렬 곱셈 순서 (feat. 백준, 11049번) (0) | 2022.08.16 |
Comments