my solution get wrong answer ?
can anyone give me sample test cases ? or detect my error in my algorithm ?
// my code
//Bismillahir Rahmanir Rahim Thanks Allah 4 everything
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <map>
#include <queue>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int dp(int a ,int opt,int k) ;
int max(int m1,int m2) ;
using namespace std;
int save[10002][102] ;
int call[10002][102] ;
int k1;
int max_b=0;
int n,m,k2;
int main()
{
while((scanf("%d%d%d",&n,&m,&k2))==3)
{
memset(save,0,sizeof(save));
memset(call,0,sizeof(call));
k1=0;
k1=m;
max_b=0;
int max_a=dp(n,0,k2);
cout << max_a << " " << max_b << endl ;
}
return 0;
}
int dp(int a,int opt,int k)
{
//cout << a << " " << opt << " " << k << endl ;
//getchar() ;
int r1,r2;
r1=opt;
if(r1==0)
r2=1;
else r2=0;
if(a<=0) return 0;
if(a<k && a<k1 ) return k1;
if(a<k && a>k1) return a ;
if(a==k) return a;
if(k==0) return 0;
if(call[a][k]==1)
return save[a][k];
call[a][k]=1;
save[a][k]=max(dp(a,r1,k-1) , k+ dp(a-k - dp(a-k,r2,k2),r1,k2) ) ;
if(opt==1)
max_b=save[a][k];
return save[a][k];
}
int max(int m1,int m2)
{
if(m1>=m2) return m1;
return m2;
}