HDU 1024:Max Sum Plus Plus(DP)
发布日期:2022-04-01 13:25:20 浏览次数:26 分类:博客文章

本文共 3249 字,大约阅读时间需要 10 分钟。

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 39886 Accepted Submission(s): 14338

Problem Description

Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem.

Given a consecutive number sequence

S
1
,
S
2
,
S
3
,
S
4
.
.
.
S
x
,
.
.
.
S
n
(
1
x
n
1
,
000
,
000
,
32768
S
x
32767
)
S_1, S_2, S_3, S_4 ... S_x, ... S_n (1 ≤ x ≤ n ≤ 1,000,000, -32768 ≤ S_x ≤ 32767)
. We define a function
s
u
m
(
i
,
j
)
=
S
i
+
.
.
.
+
S
j
(
1
i
j
n
)
sum(i, j) = S_i + ... + S_j (1 ≤ i ≤ j ≤ n)
.

Now given an integer

m
(
m
>
0
)
m (m > 0)
, your task is to find m pairs of i and j which make
s
u
m
(
i
1
,
j
1
)
+
s
u
m
(
i
2
,
j
2
)
+
s
u
m
(
i
3
,
j
3
)
+
.
.
.
+
s
u
m
(
i
m
,
j
m
)
sum(i_1, j_1) + sum(i_2, j_2) + sum(i_3, j_3) + ... + sum(i_m, j_m)
maximal (
i
x
i
y
j
x
i_x ≤ i_y ≤ j_x
or
i
x
j
y
j
x
i_x≤ j_y ≤ j_x
is not allowed).

But I`m lazy, I don’t want to write a special-judge module, so you don’t have to output m pairs of

i
i
and
j
j
, just output the maximal summation of
s
u
m
(
i
x
,
j
x
)
(
1
x
m
)
sum(i_x, j_x)(1 ≤ x ≤ m)
instead.

Input

Each test case will begin with two integers

m
m
and
n
n
, followed by
n
n
integers
S
1
,
S
2
,
S
3
.
.
.
S
n
S_1, S_2, S_3 ... S_n
.
Process to the end of file.

Output

Output the maximal summation described above in one line.

Sample Input

1 3 1 2 32 6 -1 4 -2 3 -2 3

Sample Output

68

题意

将一个长度为

n
n
的数组分成不相交的
m
m
段,求这
m
m
段的和的最大值

思路

状态:

d
p
[
i
]
[
j
]
dp[i][j]
表示在前
j
j
个数中取出
i
i
段的最大和

状态转移方程:

d
p
[
i
]
[
j
]
=
m
a
x
(
d
p
[
i
1
]
[
k
]
,
d
p
[
i
]
[
j
1
]
)
+
n
u
m
[
j
]
  
(
i
1
k
j
1
)
dp[i][j]=max(dp[i-1][k],dp[i][j-1])+num[j]\ \ (i-1\leq k \leq j-1)

由于

m
m
范围未知,
n
1
0
6
n\leq 10^6
,所以二维的dp方程无论是在时间上还是在空间上都是不允许的。

那么我们就需要对这个方程进行优化:

不难发现当前状态只与两个状态有关:

  1. j
    j
    个数和前
    j
    1
    j-1
    个数在一段里
  2. j
    j
    个数和前
    j
    1
    j-1
    个数不在一段里。

根据这一点,我们把状态降成一维的数组,

d
p
[
j
]
dp[j]
表示前
j
j
个数分
i
i
段时的最大和,然后用
s
u
m
[
j
1
]
sum[j-1]
来表示状态一的前
j
1
j-1
个数在前
i
1
i-1
段的最大和,
d
p
[
j
1
]
dp[j-1]
表示状态二的前
j
1
j-1
个数在前
i
i
段的最大和。

当前状态的转移方程为:

d
p
[
j
]
=
m
a
x
(
d
p
[
j
1
]
,
s
u
m
[
j
1
]
)
+
n
u
m
[
j
]
dp[j]=max(dp[j-1],sum[j-1])+num[j]
,持续更新dp与sum数组的值

AC代码

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define ull unsigned long long#define ms(a,b) memset(a,b,sizeof(a))#define pi acos(-1.0)#define INF 0x7f7f7f7f#define lson o<<1#define rson o<<1|1#define bug cout<<"-------------"<
>k>>n) { int res; for(int i=1;i<=n;i++) cin>>a[i]; ms(dp,0); ms(sum,0); for(int i=1;i<=k;i++) { res=-INF; for(int j=i;j<=n;j++) { dp[j]=max(sum[j-1],dp[j-1])+a[j]; sum[j-1]=res; res=max(res,dp[j]); } } cout<
<

转载地址:https://www.cnblogs.com/Friends-A/p/11054974.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:POJ 3126:Prime Path(素数+BFS)
下一篇:洛谷 P1434 [SHOI2002]滑雪(DP,记忆化搜索)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月02日 06时29分18秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

三十二. geotrellis使用 大量GeoTiff文件实时发布TMS服务 2019-04-26
VMWare虚拟机下Fedora30升级Fedora31,重启后无法启动系统,出现alloc magic is broken at 0xXXXX的错误 2019-04-26
李笑来BOX定投践行群 2019-04-26
醍醐灌顶!百亿比特币富豪李笑来的10个投资铁律 2019-04-26
李笑来力作:《让时间陪你慢慢变富 定投改变命运》 2019-04-26
【李笑来BOX践行群】谁在控制比特币网络? 2019-04-26
VBS命令:关于以管理员身份运行程序的VBS命令 2019-04-26
【测试有效】【全网唯一,不夸张】不同VBS脚本之间传递参数的方法 2019-04-26
比特币的优势在哪里? 2019-04-26
比特币的劣势在哪里? 2019-04-26
BOX定投践行群介绍 2019-04-26
慢慢变富 | 一次财富自由的机会 2019-04-26
pyinstaller打包exe,报错Failed to execute script xxx.exe 2019-04-26
python 利用datetime模块转化excel数字日期为标准日期 2019-04-26
PyCharm安装配置Qt Designer+PyUIC教程(适用在PyCharm内安装PyQt5和PyUIC) 2019-04-26
python3+PyQt5+Qt designer+pycharm安装及配置+将ui文件转py文件(适合pip安装第三方库) 2019-04-26
python下.ui转为.py文件,并用另一.py调用显示 2019-04-26
排坑:运行win32com.client.Dispatch('Word.Application')和docx.Documents.Open()报错 2019-04-26
解决方案:使用pycharm安装第三方库失败-----更换下载地址镜像 2019-04-26
你跟大神程序员的差距,就在这8本内功心法 2019-04-26