序列 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. 最小移动总距离

相关内容

热门资讯

一年649家银行退出,中小银行... 【导读】2025年减少649家,中小银行“减量提质”加速 中国基金报记者 张玲 近日,央行发布的数据...
小米汽车累计交付量已接近60万... 2月1日晚间,小米创始人、董事长兼CEO雷军在北京亦庄的小米汽车实验室直播中介绍称,小米汽车自建的实...
原创 3... 在投资市场,短期获利或许靠运气,但长期暴富必然靠眼光。近期一则“30年前以80元/克囤金几公斤,如今...
新规:禁止晚10点至早8点催收... 个人消费贷催收新规来了! 近日 中国银行业协会 发布最新指引 划定个人消费贷催收红线! 具体内容一起...
直击达沃斯|隆基绿能首席可持续... 来源:新浪财经 新浪财经蒋露瑶/发自瑞士达沃斯 在全球能源转型加速、但贸易保护主义与地缘政治风险持续...
雷军:个别车商为蹭流量说小米二... IT之家 2 月 1 日消息,小米创办人,董事长兼 CEO 雷军今晚在北京亦庄举行科普直播,揭秘新一...
全线大跌,超42万人爆仓 周末,继黄金、白银之后,加密货币也崩了。 2月1日凌晨,比特币一度跌至75719美元/枚,跌至202...
公告精选|贵州茅台董事会审议通... 重大合同或协议 中远海控(601919.SH):公司全资子公司中远资产与江南船厂、中船贸易签订合计十...
宁波队史首胜广东! 徐杰0分伤... 【搜狐体育战报】北京时间2月1日CBA常规赛第22轮,主场作战的宁波町渥以94-81击败广东东阳光,...
突发!70亿市值上市公司实控人... 又有上市公司实控人被留置! 2月1日晚间,福石控股发布公告称,其近日收到国家某监察委员会签发的留置通...
原创 黄... 后半夜的行情能把人心脏揪到嗓子眼,黄金市场突然就翻了天,电子屏上的绿条一路往下窜,跟坐了滑梯似的刹不...
金价银价创纪录暴跌,原因何在? 新闻荐读 美东时间1月30日,国际市场黄金、白银价格继续大幅下跌,均创下数十年来最大单日跌幅。纽约商...
特朗普提名美联储新主席!美元强... 据新华社消息,1月30日,美国总统特朗普正式提名凯文·沃什为下任美联储主席,接替将于2026年5月1...
雷军在直播间跟网友交流验证车辆... “轮耦合道路模拟试验室”的核心能力是模拟整车在各种颠簸路面上的振动,验证车辆的结构耐久性。 @雷军 ...
原创 日... 万科2025年预亏820亿元, 其中第四季度预亏约539.85亿元。 作者|姚悦 编辑丨于婞 来源 ...
每周研选 | 板块轮动加速,2... 近一周A股板块轮动进一步加速,前期表现较好的计算机、新能源板块有所回调,而以白酒、地产为代表的前期滞...
原创 中... 最近,英国首相斯塔默结束了对中国的历史性访问。这是自2015年以来,英国首位首相再次踏上这片东方古老...
“基金实时估值”遭全面封杀,多... 转自:财联社 财联社2月1日讯(记者 闫军)“周末加班加点,下周一(2月2日)开盘实时估值将不再提供...
以旧换新政策带动消费需求释放 国家税务总局利用税收大数据对消费情况进行跟踪分析显示,2025年我国消费市场活跃。2025年,在以旧...