P10108 [GESP202312 六级] 闯关游戏 题解返回题目

文章讲述了如何使用记忆化搜索(动态规划)解决一个关于关卡通关和分数累积的问题,通过遍历所有可能路径,找到从起点0到终点N且分数最大的策略。代码展示了如何在C++中实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意
有 

N 个关卡,每个关卡有 

M 个通道,第 

i 个通道能前进 



i

  关,每次离开当前关卡 

s 即获得当前关卡分数 



s

 ,若最后到达的关卡编号大于等于 

N 即为过关,求过关后能获得的最大分数。

解题思路
dp 即可,但我选择记忆化搜索。开一个数组存储当前分数,并且数组必须是极小值,因为分数可能是负数。dfs 暴力模拟,以 
0
0 为起点开始搜索,如果过关返回 
0
0,如果发现分数不是最小值,则分数已被修改,说明当前关卡来过了,直接返回分数,否则搜索到第 

+


x+a 
i

  关并加上当前关卡分数,最后返回总分即可。

完整代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[105],b[10005],f[10005];
ll find(ll x)
{
    if (x>=n) return 0;//如果过关则返回0,因为过关不加分 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酸甜小杨桃

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值