Pls check the code

#include <bits/stdc++.h>
using namespace std;

int dp[1005][1005];
int w;
int knapsack(int* arr,int* val,int n,int s){
if(s==0){
return 0;
}
if(n==w){
return 100000;
}
if(dp[n][s]!=-1){
return dp[n][s];
}
int a=100000,b=-1;
if(s>=n+1 && val[n]!=-1){
a=val[n]+knapsack(arr,val,n,s-n-1);
}
b = knapsack(arr,val,n+1,s);
return dp[n][s] = min(a,b);
}
int main() {
int n,s;
memset(dp,-1,sizeof(dp));
cin>>n>>s;
w = s;
int* arr=new int[n+1];
int* val=new int[n+1];
for(int i=0;i<w;i++){
cin>>val[i];
}
int v = knapsack(arr,val,0,s);
if(v==100000)
cout<<"-1\n";
else
cout<<v<<"\n";
}