题目名称 | 3700. [APIO2014]序列分割 |
---|---|
输入输出 | sequencesegmentation.in/out |
难度等级 | ★★☆ |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试数据 | 10 |
题目来源 | op_组撒头屯 于2022-07-04加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:2, 提交:4, 通过率:50% | ||||
op_组撒头屯 | 100 | 1.495 s | 0.00 MiB | C++ |
┭┮﹏┭┮ | 100 | 2.638 s | 57.87 MiB | C++ |
┭┮﹏┭┮ | 10 | 3.752 s | 0.00 MiB | C++ |
┭┮﹏┭┮ | 0 | 4.199 s | 0.00 MiB | C++ |
关于 序列分割 的近10条评论(全部评论) | ||||
---|---|---|---|---|
我怎么跑这么慢?
| ||||
由于不会写插件舍弃了方案输出,并明确了朴素分数
op_组撒头屯
2022-07-06 11:19
1楼
|
sequencesegmentation.in
输出文件:sequencesegmentation.out
简单对比你正在玩一个关于长度为$n$的非负整数序列的游戏。这个游戏中你需要把序列分成$k+1$个非空的块。为了得到$k+1$块,你需要重复下面的操作$k$次:
选择一个有超过一个元素的块(初始时你只有一块,即整个序列)
选择两个相邻元素把这个块从中间分开,得到两个非空的块。
每次操作后你将获得那两个新产生的块的元素和的乘积的分数。你想要最大化最后的总得分。
第一行包含两个整数$n$和$k$。保证$k+1≤n$。
第二行包含$n$个非负整数$a_1,a_2,…,a_n(0<=a_i<=10^4)$,表示前文所述的序列。
输出你能获得的最大总得分。
7 3 4 1 3 4 0 2 3
108
你可以通过下面这些操作获得$108$分:
初始时你有一块$(4,1,3,4,0,2,3)$。在第$1$个元素后面分开,获得$4×(1+3+4+0+2+3)=52$分。
你现在有两块$(4), (1, 3, 4, 0, 2, 3)$。在第$3$个元素后面分开,获得$(1+3)×(4+0+2+3)=36$分。
你现在有三块$(4), (1, 3), (4, 0, 2, 3)$。在第$5$个元素后面分开,获得$(4+0)×(2+3)=20$分。
所以,经过这些操作后你可以获得四块$(4), (1, 3), (4, 0), (2, 3)$并获得$52+36+20=108$分。
前$40\%$,$1≤k<n≤200$
$2≤n≤100000,1≤k≤min\{n−1,200\}$
APIO2014,有适当更改