class
Solution {
public
:
int
rec(
int
i,
int
sum,
int
N,
int
W,
int
val[],
int
wt[], vector<vector<
int
> >& dp)
{
if
(i == N)
return
0;
if
(dp[i][sum] != -1)
return
dp[i][sum];
int
w = wt[i];
int
v = val[i];
int
x = 0;
int
y = 0;
if
(w + sum <= W) {
x = v
+ rec(i, sum + w, N, W, val, wt,
dp);
}
y = rec(i + 1, sum, N, W, val, wt,
dp);
return
dp[i][sum] = max(x, y);
}
int
knapSack(
int
N,
int
W,
int
val[],
int
wt[])
{
vector<vector<
int
> > dp(N, vector<
int
>(W + 1, -1));
return
rec(0, 0, N, W, val, wt, dp);
}
};