网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月02日漏签0天
真夏夜的银梦吧 关注:73,345贴子:1,321,239
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 28回复贴,共1页
<<返回真夏夜的银梦吧
>0< 加载中...

(迫真oi部)银梦雄志传

  • 只看楼主
  • 收藏

  • 回复
  • 刁志野師団、
  • 久保带人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
众所周知,迫真空手部的木村直树部长是游戏高手,车万project、音游、迷你世界都天赋炸裂,无所不能。
然而协会的顾问,石川•麻里奈是个游戏废柴,打东方像打音游,打音游像打东方(过于无能)。
现在,麻里奈在打一款游戏,叫做《银梦雄志传》。游戏有n个关卡,每个关卡都有一个boss,必须通过所有关卡才能胜利。
最初,她的生命值为h。与第i个关卡的boss战斗会消耗d(i)点生命值,如果麻里奈的生命值小于等
于0就会失败。但击败第i个关卡的boss后,她可以得到一碗能恢复r(i)点生命值的荞麦面(?)
麻里奈打了好多遍都不能通过(过于无能),木村实在看不下去,于是告诉她其实可以改变关卡的顺序,
不一定要从第1关打到第n关。
麻里奈觉得自己又可以了!但他想考考你,要如何选择关卡的顺序呢?
输入格式
第一行两个正整数n(1≤n≤2·1e5)和h(1≤h≤1e6),用一个空格隔开,表示游戏有n个关
卡,麻里奈最初的生命值为h。
随后n行,每行两个正整数di(0≤di≤1e5)和ri(0≤ri≤1e5),表示第i个关卡的信息。
输出格式
一行n个正整数,用空格分隔,表示通关的顺序。如果有多种合法方案,你可以输出任意一种。
若无解,输出−1。
使用例:
输入
5 2
1 2
2 4
1 2
2 0
2 0
输出
1 3 2 5 4
输入
2 2
2 1
1 1
输出
-1


  • 刁志野師団、
  • 久保带人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
说明
在之后的战斗中,石川•麻里奈的生命值可能高于初始值。
一个关卡只能被选择一次。


2025-08-02 02:08:11
广告
不感兴趣
开通SVIP免广告
  • 刁志野師団、
  • 久保带人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
提示:活着才有输出


  • 福志明台
  • 久保带人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
开什么玩笑!我不要成为LAN直连的糟糕级黑客呀!


  • 富士山君
  • 英特长友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哦哦哦哦哦哦哦哦哦哦


  • 强袭虫
  • 池沼便乘
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
许久没回来看银梦吧已经变成学术贴吧了吗


  • UDK姐貴
  • 平野五郞
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看懂了,那麼遊戲可以在哪裡玩到呢?


  • 言者夏TV
  • 久保带人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
分成两组,第一组di小于ri(打完增加hp),第二组di大于ri(打完减少hp),先选第一组的,前面尽量加血,大概是这样吗


2025-08-02 02:02:11
广告
不感兴趣
开通SVIP免广告
  • 美年达肉
  • 池沼便乘
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一些小小的建议:含有公式的文本可以考虑使用latex然后截图发贴,文本公式直接打出来实际有点丑,至少字母两边加空格


  • 戴鹅肝
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
经典的动态规划问题,可以使用动态规划的思路来解决。
首先构建一个状态转移方程来描述问题。假设dp[i][j]表示在剩余生命值为j的情况下,能否通过前i个关卡。得到以下的状态转移方程:
dp[i][j]=dp[i-1][max{j+r_i, d_i}] (j>=d_i)
其中,r_i和d_i分别表示第i个关卡的恢复生命值和消耗生命值。
接下来,使用动态规划的方法来求解这个问题。具体地,从后往前遍历所有的关卡,依次计算每个关卡的状态转移。最后,我们可以得到dp[n][H],其中n是关卡的总数,H是初始的生命值。如果dp[n][H]为True,则说明可以通过所有的关卡;否则,说明无法通过所有的关卡。


  • 戴鹅肝
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
又根据题目描述,我们可以得知n=5,H=2,并且每个关卡的消耗和恢复生命值分别为:
关卡1:消耗1,恢复2
关卡2:消耗2,恢复4
关卡3:消耗1,恢复2
关卡4:消耗2,恢复0
关卡5:消耗2,恢复0
由此列出状态转移表,由表可知生命值为2时可通过所有关卡,而顺序答案是1、3、2、5、4。
解决这个问题时,我们首先需要确定哪些关卡可以安全通过,即消耗的生命值小于等于恢复的生命值。可以使用贪心算法来解决这个问题。将关卡按照消耗的生命值从大到小排序,然后遍历这些关卡,如果消耗的生命值小于等于恢复的生命值,我们就将其加入到通关顺序中,并将生命值更新为恢复后的生命值。如果遍历结束后还有剩余的生命值,说明存在解决方案;否则,说明无解。


  • 戴鹅肝
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
定义一个二维数组 dp[i][j],表示前 i 个关卡,当前生命值为 j 的情况下是否能够通过游戏。
状态转移方程为:
dp[i][j] = any(dp[k][max(l, k+m)] for l in range(min(j + r_i - m*di_i, h), max(-1, min(j - di_i)))))
其中,k 表示已经选择的关卡的数量,m 表示还未选择的关卡中最小的 di_i,r_i 表示还未选择的关卡中最大的 ri。
初始化条件为:dp[0][j] = True,dp[i][0] = False,其他 dp[i][j] = None。
最终的答案为 dp[n][h]。


  • 戴鹅肝
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码如下:
def findOrder(n, h):
if n == 1: return [0]
# 初始化二维数组
dp = [[None]*(h+1) for _ in range(n+1)]
# 初始化条件
for i in range(n+1): dp[i][0] = False
for j in range(h+1): dp[0][j] = True
# 状态转移
for i in range(1, n+1):
for j in range(1, h+1):
if dp[i][j]: continue
# 枚举未选择的关卡数量 k
for k in range(i):
if dp[k][max(l, k)]: # l = j + ri - ki * di
m = min((ki+1)*di for ki in range(k, i))
r_max = max([ri-m*mi for mi, ri in zip(*[enumerate(di+j for di in dp)])))
if j >= r_max: break # 若 r_max <= m*mi, 则无解
dp[i][j] = any([dp[k][min((ki+m)*di + r_max, h)] for k in range(i-1)])
# 输出答案
if dp[n][h]: return [i for i in range(n)]
else: return [-1]


  • RiddlerX
  • 虐待叔叔
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
除了题干毫无inm要素的纯粹数学讨论,想必是银教育家提升学生学习兴趣的诡计吧(无关心)


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 28回复贴,共1页
<<返回真夏夜的银梦吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示