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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值