For small inputs the code is running fine! .For bigger inputs I am getting an "Time Limit Exceeded" error can some one explain the reason .I have used (recursion +memorization)
Link to the problem:https://practice.geeksforgeeks.org/problems/0-1-knapsack-problem0945/1#
Here is the code :
int a[10005][10005]; // I have declared this globally.
int knapSack(int W, int wt[], int val[], int n)
{
memset(a,-1,sizeof(a));
if (n == 0 || W == 0)
{
return 0;
}
if(a[n][W]!=-1)
{
return a[n][W];
}
if (wt[n - 1] > W)
{
a[n][W]=knapSack(W, wt, val, n - 1);
return a[n][W];
}
if(wt[n - 1] <= W)
{
a[n][W]= max(val[n - 1]+ knapSack(W - wt[n - 1],wt, val, n - 1),knapSack(W, wt, val, n - 1));
return a[n][W];
}
}
For smaller Input's:
For Input:
3 // n=no.of inputs
4 //W capacity of the bag
1 2 3 //val[ ]
4 5 1 //wt[ ]
your output is: 3
For larger Input's:
"Time Limit Exceeded"
Aucun commentaire:
Enregistrer un commentaire