小明和朋友们一起玩跳格子游戏,
每个格子上有特定的分数 score = [1, -1, -6, 7, -17, 7],
从起点score[0]开始,每次最大的步长为k,请你返回小明跳到终点 score[n-1] 时,能得到的最大得分。
第一行输入总的格子数量 n
第二行输入每个格子的分数 score[i]
第三行输入最大跳的步长 k
输出最大得分
备注
格子的总长度 n 和步长 k 的区间在 [1, 100000]
每个格子的分数 score[i] 在 [-10000, 10000] 区间中
输入:
6
1 -1 -6 7 -17 7
2
输出:
14
说明:
输出最大得分数,小明从起点score[0]开始跳,
第一次跳score[1],第二次跳到score[3],第三次跳到score[5],
因此得到的最大的得分是
score[0] + score[1] + score[3] + score[5] = 14
#include <stdio.h>
#include <map>
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
#include <math.h>
using namespace std;
int GetScoreGame(int sStartIndex, int iSocre[],size_t sCount, size_t sMaxStep,int& iCount)
{
int iMax(0);
if (sStartIndex >= sCount || sStartIndex < 0)
{
return iCount;
}
int iTemp = iCount;
for(size_t sLoop = 0;sLoop < sMaxStep; sLoop++)
{
iCount = iTemp; //这里很关键,每一次改变跳法的时候都要重置积分
if (sStartIndex + sLoop < sCount)
{
iCount += iSocre[sStartIndex + sLoop];
int iRet = GetScoreGame(sStartIndex + sLoop + 1,iSocre,sCount,sMaxStep,iCount);
if (iMax < iRet)
{
iMax = iRet;
}
}
}
return iMax;
}
int main()
{
int iScore[] = {1,-1,-6,7,-17,7,2,10,1,11,2,18,0,22,23,0,18 -5,-3,-10,-11,1,-4,2,-4};
int iTemp(0);
int iRet = GetScoreGame(0,iScore,sizeof(iScore) / sizeof(int),2,iTemp);
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
怀疑对方AI换脸可以让对方摁鼻子 真人摁下去鼻子会变形
女子野生动物园下车狼悄悄靠近 后车司机按喇叭提醒
睡前玩8分钟手机身体兴奋1小时 还可能让你“变丑”
惊蛰为啥吃梨?倒春寒来不来就看惊蛰
男子高速犯困开智能驾驶出事故 60万刚买的奔驰严重损毁