백준 17208 c++

magicdrill·2024년 12월 24일

백준 문제풀이

목록 보기
514/673

백준 17208 c++

두 물건의 가치를 동시에 비교하는 방향이라고 생각했지만, 사실 기존의 각각의 객체의 무게와 가치를 동시에 비교하는 방향과 다를게 없다.

#include <iostream>
#include <vector>

using namespace std;

void input_data(int* N, int* M, int* K, vector<pair<int, int>> &order) {
	cout << "input_data()\n";
	int i, x, y;

	cin >> *N >> *M >> *K;
	for (i = 0; i < *N; i++) {
		cin >> x >> y;
		order.push_back({ x, y });
	}

	return;
}

int find_answer(int N, int M, int K, vector<pair<int, int>>& order) {
	cout << "find_answer()\n";
	int answer = 0;
	int i, j, k;
	int current_order_burger, current_order_fries;
	vector<vector<int>> DP(M + 1, vector<int>(K + 1, 0));

	//M은 남은 치즈버거 개수
	//K는 남은 감자튀김 개수
	//order[].first는 요구 치즈버거
	//order[].second는 요구 감자튀김
	//남은 치즈버거와 감자튀김으로 처리할 수 있는 최대 주문개수
	for (i = 0; i < N; i++) {
		current_order_burger = order[i].first;
		current_order_fries = order[i].second;

		for (j = M; j >= current_order_burger; j--) {
			for (k = K; k >= current_order_fries; k--) {
				DP[j][k] = max(DP[j][k], DP[j - current_order_burger][k - current_order_fries] + 1);
			}
		}

		cout << i << "번 순회\n";
		for (j = 0; j <= M; j++) {
			for (k = 0; k <= K; k++) {
				cout << DP[j][k] << " ";
			}
			cout << "\n";
		}
	}
	answer = DP[M][K];

	return answer;
}

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

	int N, M, K;
	vector<pair<int, int>> order;

	input_data(&N, &M, &K, order);
	cout << find_answer(N, M, K, order) << "\n";

	return 0;
}

0개의 댓글