题目描述
有n个格子,编号为1~n,从1号格子开始往前跳,每次只能往前跳2格或3格,最终要跳到n号格子,格子里面所对应的数字大小表示跳到当前格子可以获得的分数,格子里的数字大小不会是负数,问如何跳可以累计获得最大分数。
输入格式
第一行一个整数n。 第二行n个用空格隔开的非负整数,分别代表每个格子里所对应的数字大小。注意,输入数据能保证1号格子里的数字大小永远是0。
输出格式
输出一个整数表示可以获得的最大分数。
#include<bits/stdc++.h> using namespace std; int n; int m[20],q=INT_MIN; void p(int x,int y){ if(y<0||y>n){ return; } if(y==n){ q=max(q,x); } for(int i=2;i<=3;i++){ if(i==2){ p(x+m[y+2],y+2); } if(i==3){ p(x+m[y+3],y+3); } } return; } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> m[i]; } p(0,1); cout<<q; return 0; }