

두 물건의 가치를 동시에 비교하는 방향이라고 생각했지만, 사실 기존의 각각의 객체의 무게와 가치를 동시에 비교하는 방향과 다를게 없다.
#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;
}