Algorithm --> 爬楼梯求最大分数

爬楼梯求最大分数

如下图,最大分数是: 10+20+25+20=75.

      

要求:

1、每次只能走一步或者两步;

2、不能连续三步走一样的,即最多连续走两次一步,或者连续走两次两步;

3、必须走到最后一层台阶。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

#define MAX 301
#define max(a, b) ((a) > (b) ? (a) : (b))

int Answer, N;
int stairs[MAX];
int dp[MAX];

int main( int argc, char** argv )
{
    int T, test_case;


    freopen( "input_climingstairs.txt", "r", stdin );

    cin >> T;
    for( test_case = 0; test_case  < T; test_case++ )
    {
        Answer = 0;

        cin >> N;

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

        for( int i = 1; i <= N; i++ )
        {
            cin >> stairs[i];
        }

        dp[0] = 0;
        dp[1] = stairs[1];
        dp[2] = stairs[2] + dp[1];
        for( int j = 3; j <= N; j++ )
        {
            dp[j] = max( dp[j-2], dp[j-3] + stairs[j-1] ) + stairs[j];
        }

        Answer = dp[N];

        cout << Answer << endl;
    }

    return 0;
}

输入文件:

5
7
13
1
15
27
29
21
20
16
72
28
39
27
38
8
97
16
72
58
45
58
85
41
83
30
25
200
132
114
24
190
110
10
56
64
59
77
176
133
155
109
187
70
29
26
87
193
7
153
199
53
40
192
96
124
136
158
11
5
155
176
171
150
174
7
149
127
127
68
173
134
186
180
46
92
77
60
182
168
139
39
104
139
198
158
30
38
162
31
102
89
56
60
565
657
63
611
477
329
43
195
462
455
610
332
456
186
455
134
38
66
232
786
528
277
662
275
402
98
723
492
654
373
717
492
238
411
554
104
252
102
548
136
693
723
311
325
763
457
600
624
651
549
393
311
79
212
426
420
116
160
242
422
View Code
原文地址:https://www.cnblogs.com/jeakeven/p/4788686.html