Can you help me to optimize more
#include <bits/stdc++.h>
using namespace std;
int ans(int str[][1001],int arr[],int m,int N){
if(m==0)return 0;
if(N<0)return 0;
if(N==0)return 1;
if(str[N-1][m-1]!=0)return str[N-1][m-1];
str[N-1][m-1] = ans(str,arr,m,N-arr[m-1])+ans(str,arr,m-1,N);
return str[N-1][m-1];
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t; cin>>t;
while(t--){
// your code goes here
int m; cin>>m;
int arr[m];
for(int i=0;i<m;i++)cin>>arr[i];
int N; cin>>N;
int str[N][1001]={0};
cout<<ans(str,arr,m,N)<<"\n";
}
return 0;
}