leetcode 1043 Partition Array for Maximum Sum 详解

本文详细介绍了LeetCode 1043题目的解决方案,通过动态规划的方法求解数组分区以达到最大和。文中以一个具体的例子说明了动态规划的状态转移方程,并给出了相应的代码实现,帮助读者理解如何运用DP解决这类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode 1043 Partition Array for Maximum Sum 详解

在这里插入图片描述

这是个典型的DP问题,所以先分拆成小的子问题。
如:arr = [1,15, 7, 9, 2, 5, 10],  k = 3

f(i)f(i)f(i)存储的是当前数组arr[0,..,i−1]arr[0,..,i-1]arr[0,..,i1]的解
f(0)=0f(0)=0f(0)=0                                (1)

i=0,arr[0]=1,则f(1)=1i = 0, arr[0]=1, 则f(1)=1i=0,arr[0]=1,f(1)=1                      (2)

i=1,arr[1]=15,f(2)=max(f(0)+2∗max(arr[0,.,1]),f(1)+1∗arr[1])=30i=1, arr[1]=15, f(2) = max(f(0)+2*max(arr[0,.,1]), f(1)+1*arr[1])=30i=1,arr[1]=15,f(2)=max(f(0)+2max(arr[0,.,1]),f(1)+1arr[1])=30                          (3)


i=2,arr[2]=7,则f(3)=max(f(0)+3∗max(arr[0,.,2]),f(1)+2∗max(arr[1,.,2]),f(2)+arr[2])=40i=2, arr[2]=7, 则f(3)=max(f(0)+3*max(arr[0,.,2]), f(1)+2*max(arr[1,.,2]), f(2)+arr[2])=40i=2,arr[2]=7,f(3)=max(f(0)+3max(arr[0,.,2]),f(1)+2max(arr[1,.,2]),f(2)+arr[2])=40              (4)


i=3,arr[3]=9,则f(4)=max(f(1)+3∗max(arr[1,.,3]),f(2)+2∗max(arr[2,.,3]),f(3)+arr[3])=54i=3, arr[3] = 9, 则f(4) = max(f(1)+3*max(arr[1,.,3]), f(2)+2*max(arr[2,.,3]),f(3)+arr[3]) = 54i=3,arr[3]=9,f(4)=max(f(1)+3max(arr[1,.,3]),f(2)+2max(arr[2,.,3]),f(3)+arr[3])=54             (5)
...
...

从上述例子中可以得出一个方程式:

f(i)=max(f(i−j)+j∗cur_max)f(i) = max(f(i-j) + j * cur\_max) f(i)=max(f(ij)+jcur_max)j∈[1,min(i,k)]j \in [1, min(i,k)]j[1,min(i,k)]

最后代码如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值