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;
}
결과값도 잘 나오는데 백준에 제출만 하면 자꾸 틀렸다고 나오는데 알고리즘에 무슨 문제가 있는건가요?
댓글 1