Time limit exceeded

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;

}