백준 7579 c++ : DP, 배낭문제

magicdrill·2024년 12월 11일

백준 문제풀이

목록 보기
505/673

백준 7579 c++ : DP, 배낭문제

배낭보다 DP가 더 시급한거 같은데 DP는 문제가 한정되지 않아서 잘 모르겠다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void input_data(vector<int>& A, vector<int>& m, int* N, int* M, int *sum) {
	cout << "input_data()\n";
	int i, temp;

	cin >> *N >> *M;
	A.resize(*N + 1);
	m.resize(*N + 1);
	for (i = 1; i <= *N; i++) {
		cin >> A[i];
	}
	for (i = 1; i <= *N; i++) {
		cin >> m[i];
		*sum += m[i];
	}

	return;
}

int find_answer(vector<int>& A, vector<int>& m, int N, int M, int sum) {
	cout << "find_answer()\n";
	vector<int>DP(sum + 1, 0);
	int i, j;

	//M바이트를 확보하기 위한 앱 비활성화의 최소화 비용
	//최소값 = 총합 - 최대값?
	for (i = 1; i <= N; i++)
	{
		for (j = sum; j >= m[i]; j--)
		{
			DP[j] = max(DP[j], DP[j - m[i]] + A[i]);
		}

		for (j = 1; j <= sum; j++) {
			cout << DP[j] << " ";
		}
		cout << "\n";
	}

	for (i = 0; i <= sum; i++) {
		if (DP[i] >= M) {
			return i;
		}
	}
}

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	vector<int> A;
	vector<int> m;
	int N, M, sum = 0;

	input_data(A, m, &N, &M, &sum);
	cout << find_answer(A, m, N, M, sum) << "\n";

	return 0;
}

0개의 댓글