力扣每日一题打卡 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]

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

选择

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

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

相关推荐
Salt_07281 分钟前
DAY 40 早停策略和模型权重的保存
人工智能·python·算法·机器学习
卜锦元13 分钟前
Golang后端性能优化手册(第三章:代码层面性能优化)
开发语言·数据结构·后端·算法·性能优化·golang
Binky67814 分钟前
力扣--回溯篇(2)
算法·leetcode·职场和发展
东东的脑洞1 小时前
【面试突击】Redis 主从复制核心面试知识点
redis·面试·职场和发展
De-Alf1 小时前
Megatron-LM学习笔记(6)Megatron Model Attention注意力与MLA
笔记·学习·算法·ai
2401_841495641 小时前
【LeetCode刷题】打家劫舍
数据结构·python·算法·leetcode·动态规划·数组·传统dp数组
冰西瓜6001 小时前
STL——vector
数据结构·c++·算法
天呐草莓1 小时前
集成学习 (ensemble learning)
人工智能·python·深度学习·算法·机器学习·数据挖掘·集成学习
努力学算法的蒟蒻1 小时前
day45(12.26)——leetcode面试经典150
算法·leetcode·面试
闻缺陷则喜何志丹2 小时前
【离线查询 前缀和 二分查找 栈】P12271 [蓝桥杯 2024 国 Python B] 括号与字母|普及+
c++·算法·前缀和·蓝桥杯·二分查找··离线查询