No Rules Rules

앱 (feat. 백준, 7579번) 본문

생활/코테

앱 (feat. 백준, 7579번)

개발하는 완두콩 2022. 8. 17. 12:55
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;
}
// *&)*@*
  1. N개의 앱과 메모리 바이트를 2차원 배열 형태로 dp를 생성합니다. 그리고 dp의 값은 메모리 값 입니다. (dp[0][0] = 메모리값)
  2. 1 ≤ N ≤ 100 이므로 dp[101], 0 ≤ c1, ..., cN ≤ 100 이므로 dp[100 * 100 + 1]. 즉, dp[101][100 * 100 + 1] 이 총 크기가 됩니다.
  3. 예제를 dp로 표현하면 아래와 같습니다.

dp[i][j] = max(dp[i][j], dp[i - 1][j - c[i]] + A[i]) 가 dp 계산의 핵심입니다.

728x90
반응형
Comments