ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1928. И вновь про экологию

wrong anser
Послано shahriar 9 ноя 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;
}