Submission
Status:
[PPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: navysrimuang
Problemset: laracroft
Language: cpp
Time: 0.012 second
Submitted On: 2026-03-18 21:48:27
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
cin.tie(0)->sync_with_stdio(0);
int n,x;
cin >> n >> x;
vector<int> wt(n+1);
vector<int> val(n+1);
vector<vector<pair<ll,ll>>> dp(n+1,vector<pair<ll,ll>>(x+1,{0,0})); // dp[i][x] = at index , and max cap = x, = best val;
for(int i = 1;i<=n;i++) cin >> val[i];
for(int i = 1;i<=n;i++) cin >> wt[i];
for(int i = 1;i<=n;i++){
for(int j = 1;j<=x;j++){
dp[i][j] = dp[i-1][j];
if(wt[i] <= j){
if(dp[i-1][j-wt[i]].first + val[i] > dp[i][j].first){
dp[i][j].first = dp[i-1][j-wt[i]].first + val[i];
dp[i][j].second = dp[i-1][j-wt[i]].second + wt[i];
}else if(dp[i-1][j-wt[i]].first + val[i] == dp[i][j].first){
dp[i][j].second = min(dp[i][j].second, dp[i-1][j-wt[i]].second + wt[i]);
}
}
}
}
cout << dp[n][x].first << " " << dp[n][x].second << "\n";
return 0;
}