Submission

Status:

[PPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: kittipos

Problemset: laracroft

Language: cpp

Time: 0.087 second

Submitted On: 2026-03-05 20:44:56

#include <iostream>
#include <vector>
#include <limits>

using namespace std;

vector<int> value;
vector<int> weight;

vector<vector<vector<int>>> dp; //i, m, p

int solve(int i, int m, bool p) {
  if (m < 0) {
    return numeric_limits<int>::min();
  }
  if (m == 0 || i < 0) {
    return 0;
  }
  if (dp[i][m][p] != -1) {
    return dp[i][m][p];
  }

  int res = solve(i-1, m, true);
  if (p) {
    res = max(res, solve(i, m-weight[i], false) + value[i]);
  }
  dp[i][m][p] = res;

  return res;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n, m;
  cin >> n >> m;
  value.resize(n);
  weight.resize(n);
  dp.assign(n, vector<vector<int>>(m+1, vector<int>(2, -1)));

  for (int i = 0; i < n; i++) {
    cin >> value[i];
  }
  for (int i = 0; i < n; i++) {
    cin >> weight[i];
  }

  int best_value = solve(n-1, m, true);
  for (int i = 0; i <= m; i++) {
    if (solve(n-1, i, true) == best_value) {
      cout << best_value << ' ' << i;
      return 0;
    }
  }

  return 0;
}