爬楼梯求最大分数
如下图,最大分数是: 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