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

magicdrill·2024년 12월 26일
0

백준 문제풀이

목록 보기
516/656

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

#include <iostream>
#include <vector>

using namespace std;

void input_data(int* D, int* P, vector<pair<int, int>>& pipe) {
	cout << "\ninput_data()\n";
	int i, L, C;

	cin >> *D >> *P;
	for (i = 0; i < *P; i++) {
		cin >> L >> C;
		pipe.push_back({ L, C });
	}

	return;
}

int find_answer(int D, int P, vector<pair<int, int>>& pipe) {
	cout << "\nfind_answer()\n";
	int answer = 0;
	int i, j, k;
	int L, C;
	//vector<vector<int>> DP(P, vector<int>(D + 1, 0));
	vector<int> DP(D + 1, 0);
	DP[0] = 2100000000;

	//L은 길이, C는 용량
	//수도관의 용량은 그것을 이루는 파이프들 중 최소값...
	// 용량이 1, 7, 2인 파이프들로 만들었다면 해당 수도관 용량은 1
	for (i = 0; i < P; i++) {
		L = pipe[i].first;
		C = pipe[i].second;

		for (j = D; j >= L; j--) {
			DP[j] = max(DP[j], min(DP[j - L], C));
		}

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

	return answer;
}

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

	int D, P;
	vector<pair<int, int>> pipe;

	input_data(&D, &P, pipe);
	cout << find_answer(D, P, pipe) << "\n";

	return 0;
}

0개의 댓글