#include<iostream>
using namespace std;
int arr[300];
int dp[301];
int cnt = 0;
int tmp = 1;
int stairs(int n)
{
if (dp[n] != 0)
return dp[n];
if (n == 0)
{
cnt++;
return arr[0];
}
if (n < 0)
return 0;
dp[n] = stairs(n - 1);
if (arr[tmp] > arr[tmp+1] && (cnt+1) % 3 != 0)
{
dp[n] += arr[tmp];
tmp++; cnt++;
}
else
{
dp[n] += arr[tmp+1];
tmp += 2;
cnt = 0;
}
return dp[n];
}
int main(void)
{
int t, j;
memset(dp, 0, sizeof(dp));
memset(arr, 0, sizeof(arr));
do {
cin >> t;
} while (t > 300);
for(j=0;j<t;j++)
{
cin >> arr[j];
if (arr[j] > 10000)
j--;
}
cout << endl;
cout << stairs(t-(t/3)) << endl;
return 0;
}
이게 내 소스고 백준 알고리즘에서 계단 오르기 풀려는데
조건
- 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
- 연속된 세 개의 계단을 모두 밟아서는 안된다. 단, 시작점은 계단에 포함되지 않는다.
- 마지막 도착 계단은 반드시 밟아야 한다.
1개를 연속해서 3번 못오른다는거고 계단 최대값 구하는건데 뭐가 잘못된건지 알려주실분??
https://www.acmicpc.net/problem/2579
링크는 이거
댓글 0