爬楼梯求最大分数
如下图,最大分数是: 10+20+25+20=75.
要求:
1、每次只能走一步或者两步;
2、不能连续三步走一样的,即最多连续走两次一步,或者连续走两次两步;
3、必须走到最后一层台阶。
代码:
#include#include #include 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;}
输入文件:
571311527292120167228392738897167258455885418330252001321142419011010566459771761331551091877029268719371531995340192961241361581151551761711501747149127127681731341861804692776018216813939104139198158303816231102895660565657636114773294319546245561033245618645513438662327865282776622754029872349265437371749223841155410425210254813669372331132576345760062465154939331179212426420116160242422