序列 DP
admin
2024-02-24 03:28:04
0

文章目录

  • [813. 最大平均值和的分组](https://leetcode.cn/problems/largest-sum-of-averages/)
  • [1478. 安排邮筒](https://leetcode.cn/problems/allocate-mailboxes/)
  • [2463. 最小移动总距离](https://leetcode.cn/problems/minimum-total-distance-traveled/)

813. 最大平均值和的分组

dp[i][j] 表示 nums 在区间 [0,i) 被切分成 j 个子数组的最大平均值和,显然 i ≥ j,计算分两种情况讨论:

当 j = 1 时,dp[i][j] 是对应区间 [0, i) 的平均值;
当 j > 1 时,可以将区间 [0, i - 1] 分成 [0, x) 和 [x, i ) 两个部分,其中 x > j,那么 dp[i][j] 等于所有这些合法的切分方式的平均值和的最大值。

因此转移方程为:

dp[i][j]={∑r=0i−1nums[r]i,j=1max⁡x≥j−1{dp[x][j−1]+∑r=xi−1nums[r]i−x},j>1\textit{dp}[i][j] = \begin{cases} \dfrac{\sum_{r = 0}^{i - 1}\textit{nums}[r]}{i}, & j = 1 \\ \max\limits_{x \ge j - 1} \{dp[x][j - 1] + \dfrac{\sum_{r = x}^{i - 1}\textit{nums}[r]}{i - x}\}, & j > 1 \end{cases}dp[i][j]=⎩⎪⎪⎨⎪⎪⎧​i∑r=0i−1​nums[r]​,x≥j−1max​{dp[x][j−1]+i−x∑r=xi−1​nums[r]​},​j=1j>1​

假设数组 nums 的长度为 n,那么 dp[n][k] 表示数组 nums 分成 k 个子数组后的最大平均值和,即最大分数。

class Solution:def largestSumOfAverages(self, nums: List[int], k: int) -> float:n = len(nums)acc = list(accumulate(nums, initial=0))dp = [[0.0] * (k + 1) for _ in range(n + 1)]for i in range(1, n + 1):dp[i][1] = acc[i] / ifor j in range(2, k + 1):for i in range(j, n + 1):for x in range(j - 1, i):dp[i][j] = max(dp[i][j], dp[x][j - 1] + (acc[i] - acc[x]) / (i - x))return dp[n][k]

由于 dp[i][j] 的计算只利用到 j−1 的数据,因此也可以使用一维数组对 dp[i][j] 进行计算,在计算过程中,要注意对 i 进行逆序遍历。

class Solution:def largestSumOfAverages(self, nums: List[int], k: int) -> float:n = len(nums)prefix = list(accumulate(nums, initial=0))dp = [0.0] * (n + 1)for i in range(1, n + 1):dp[i] = prefix[i] / ifor j in range(2, k + 1):for i in range(n, j - 1, -1):for x in range(j - 1, i):dp[i] = max(dp[i], dp[x] + (prefix[i] - prefix[x]) / (i - x))return dp[n]

动态规划,1478题、最近周赛的2463题都是类似的题目,属于把一个数组分成k段求一个最值属性。套路比较统一,dp[i][k]表示将nums[0:i]分成k份的最大平均值和。枚举一个能使dp[i][k]取最大值的分割点j,0j分成k-1份,j+1i单独一份。一般j+1~i段的那个属性可以利用某些预处理在常数时间得到,本题只需要预处理出来前缀和就能快速计算子数组的平均值。

const int N = 110;
double dp[N][N];class Solution {
public:double largestSumOfAverages(vector& nums, int K) {int n = nums.size();memset(dp, 0, sizeof dp);vector s(n);s[0] = nums[0];for(int i = 1; i < n; i++) {s[i] = s[i - 1] + nums[i];}for(int i = 0; i < n; i++) dp[i][1] = s[i]*1.0 / (i + 1);for(int i = 1; i < n; i++) {for(int k = 2; k <= min(i + 1, K); k++) {for(int j = 0; j < i; j++) {dp[i][k] = max(dp[i][k], dp[j][k - 1] + windowSum(s, j + 1, i)/(i - j));}}}double ans = 0;for(int k = 1; k <= K; k++) ans = max(ans, dp[n - 1][k]);return ans;}double windowSum(vector& s, int left, int right) {return s[right] - (left? s[left - 1]: 0);}
};

1478. 安排邮筒

2463. 最小移动总距离

相关内容

热门资讯

小猿淘金APP非法期货交易骗局...   小猿淘金等平台在多个网络渠道投放广告,以“5元即可投资”等低门槛宣传吸引投资者开户操作。然而,经...
拇指订购APP炒白银铂金期货交...   拇指订购APP的交易模式存在严重问题。平台虽宣传为“订购交易”,但其实际操作完全照搬期货交易机制...
掌上工美APP、工美有色APP...   掌上工美APP、工美有色APP、工美黄金APP存在巨大的非法期货骗局,在这些平台的投资者基本都是...
南昌闲置金饰变现 回收金项链需... 随着近年黄金价格持续波动,不少持有闲置黄金首饰的居民都有变现需求,回收金项链是其中较为常见的业务类型...
原创 7... 昨天刷到日本三菱电机的动向有点荒诞:这家做家电的巨头最近牵头搞了个回收项目,每年拆23万台废旧家用空...
公募FOF基金经理展望下半年:... ◎记者 陈玥 2026年上半年,全球市场在流动性宽松与产业趋势共振的驱动下,上演了一出“冰火两重天”...
全市场规模最大ETF易主!黄金... 截至7月6日收盘,全亚洲规模最大的黄金ETF标的——黄金ETF华安(518880)报8.63元,本月...
上半年IPO申报放量升温,科创... 2026年上半年的IPO市场,在6月迎来了集中交卷。Wind数据显示,上半年三大交易所合计新增受理I...
管好养老钱壮大耐心资本 保险资... 段国圣,理学硕士,工学博士,经济学博士后,数学副教授,应用经济学研究员(教授)。深耕保险投资30余年...
惠州A股上市公司一年半市值翻倍... 每经记者:孔泽思 每经编辑:袁东 |2026年7月7日 星期二| NO.1 深圳集成电路产业去年营收...
植物性饮食的新课题:荷兰研究揭... 周末的家常餐桌上,一家人尝试用植物性替代品替代肉鱼和奶制品,孩子吃得香,老人也在细嚼慢咽中尝试豆类与...
周一(7月6日),美股行业ET... 周一(7月6日),美股行业ETF多数收涨,全球科技股指数ETF涨2.18%,半导体ETF涨2.03%...
想在吉林做卤味加盟怎么判断企业... 有意向了解卤味加盟的创业者,往往首先关注合作企业的专业度,当前休闲卤味消费市场规模稳步增长,不同企业...
华府消息|北约盟友经历从奉承特... (来源:华府圈内) 今天是《华府消息》连续更新的第2218天 7月4日独立日烟花表演期间,纽约布鲁克...
兴财说 | A股风格高低切换,... (来源:兴华基金) ►►► 权益市场表现 01 市场表现回顾 数据来源:iFinD,统计区间:20...
加息押注削弱 黄金白银连续上涨 (来源:金砖汇通) 贵金属分析 现货黄金交投于4130美元附近,美联储9月加息押注下降推动金价走高...
SpaceX“二把手”官宣向“... 转自:财联社 财联社7月7日讯(编辑 赵昊)SpaceX总裁兼首席运营官格温·肖特韦尔(Gwynne...
沈阳茅台回收怎么挑选合规的回收... 随着国内礼品消费市场的发展,不少居民手中都持有闲置的高端礼品,包括名酒、黄金、奢侈品等,有变现需求的...
北京再开店 沃尔玛试水“平价山... (来源:北京商报) 沃尔玛想要翻开新篇章。近日,北京商报记者从沃尔玛中国独家获悉,公司正在北京积极推...
午盘:美股涨跌不一 科技股推动... 来源:环球市场播报 北京时间7月7日晚,美股周一午盘涨跌不一,科技股普涨推动纳指走高。市场关注的焦点...