https://www.acmicpc.net/problem/2579


여기 계단 수에 맞춰서 최대 합 구하는 문제인데 


#include<iostream>

#include<memory.h>


using namespace std;


int arr[300];

int dp[301];

int cnt = 1;

int tmp = 1;


int stairs(int n)

{

if (dp[n] != 0)

return dp[n];


if (n <= 0)

return arr[0];


dp[n] = stairs(n - 1);//dp 1 = stair(0) dp 2 = stair(1) dp 3= stair(2)

if (arr[tmp] > arr[tmp+1] && (cnt+1) != 3)

{

dp[n] += arr[tmp]; //dp 1 stair(0) + arr[1] 

tmp++; cnt++;//tmp 2 cnt 2 

}

else if(arr[tmp] < arr[tmp+1])

{

dp[n] += arr[tmp+1];//dp 2 = stair(1) + arr[3]

tmp += 2;//tmp 4

cnt = 0;// cnt 0

}

return dp[n];

}

int main(void)

{

int t;

register int j;


memset(dp, 0, sizeof(dp));

memset(arr, 0, sizeof(arr));

cin >> t;


for(j=0;j<t;j++)

cin >> arr[j];


cout << stairs(t) << endl;

return 0;

}


결과값도 잘 나오는데 백준에 제출만 하면 자꾸 틀렸다고 나오는데 알고리즘에 무슨 문제가 있는건가요?