跳格子3 - 华为OD C++

题目描述

小明和朋友们一起玩跳格子游戏,

每个格子上有特定的分数 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] 区间中

输入输出示例1

输入:
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值