ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1928. Another Ecology Problem

wrong anser
Posted by shahriar 9 Nov 2012 00:22
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;
}