力扣每日一题打卡 3180. 执行操作可获得的最大总奖励 I

给你一个整数数组 rewardValues,长度为 n,代表奖励的值。

最初,你的总奖励 x 为 0,所有下标都是未标记 的。你可以执行以下操作 任意次

  • 从区间 [0, n - 1] 中选择一个 未标记 的下标 i
  • 如果 rewardValues[i] 大于 你当前的总奖励 x,则将 rewardValues[i] 加到 x 上(即 x = x + rewardValues[i]),并标记 下标 i

以整数形式返回执行最优操作能够获得的最大 总奖励。

这题目其实是个非常明显的背包问题,只不过是稍微改了一下的0-1背包问题,所以很明显是个动态规划(dp)题,但可惜我太久没写题目了,已经不会dp了。(不,明明是因为晚上的时候脑子不清醒转不动)

最后是稍微借助了一下题目下方的提示才写出来的。

dp嘛,能找到状态转移方程,题目就算解决一半了,所以重点在于我们的状态转移方程要怎么确定。

我们可以设计dp[i][j]=1表示我们有 i 个物品,可以获得 j 的奖励。那么,最后要求的就是dp[n-1]那一行最大的满足dp[n-1][j]=1的 j 。

那dp[i-1]怎么的值要怎么转移到dp[i]呢?如果我们不选第i个物品,那肯定dp[i]=dp[i-1]。而如果我们要选第i个物品呢?我们知道,只有手上的奖励值比rewardValues[i]

的值小的时候,我们才可以

选择

首先,因为这个题只需要求最大的总奖励,对具体选的物品编号没有要求,所以我们完全可以先排个序,而且排序之后也可以更方便进行选择。

然后,因为每次选择的奖励值必须大于你手上的奖励值,所以我们绝对不可能选择两个奖励值一样的物品,所以我们可以对输入数据进行一次去重。

相关推荐
贾斯汀玛尔斯16 分钟前
每天学一个算法-快速排序(Quick Sort)
数据结构·算法
炽烈小老头18 分钟前
【每天学习一点算法 2026/04/16】逆波兰表达式求值
学习·算法
优家数科29 分钟前
水质监测不准?解密云端 TDS 数据建模纠偏算法
算法
木井巳35 分钟前
【递归算法】组合总和
java·算法·leetcode·决策树·深度优先·剪枝
coding者在努力44 分钟前
被n整除的n位数
c++·算法
黎阳之光1 小时前
去标签化无感定位技术突破,黎阳之光重构空间定位技术路径
大数据·人工智能·算法·安全·数字孪生
见叶之秋1 小时前
【数据结构】详解二叉树和堆
数据结构·算法
CoovallyAIHub2 小时前
MSD-DETR:面向机车弹簧检测的可变形注意力Detection Transformer
算法·架构
CoovallyAIHub2 小时前
不改权重、不用训练!BEM用背景记忆抑制固定摄像头误检,YOLO/RT-DETR全系有效
算法·架构·github
Struggle_97552 小时前
算法知识-从递归入手三维动态规划
算法·动态规划