B - Polycarp‘s Practice

Polycarp is practicing his problem solving skill. He has a list of nn problems with difficulties a_1, a_2, \dots, a_na1​,a2​,...,an​, respectively. His plan is to practice for exactly kk days. Each day he has to solve at least one problem from his list. Polycarp solves the problems in the order they are given in his list, he cannot skip any problem from his list. He has to solve all nn problems in exactly kk days.

Thus, each day Polycarp solves a contiguous sequence of (consecutive) problems from the start of the list. He can't skip problems or solve them multiple times. As a result, in kk days he will solve all the nn problems.

The profit of the jj-th day of Polycarp's practice is the maximum among all the difficulties of problems Polycarp solves during the jj-th day (i.e. if he solves problems with indices from ll to rr during a day, then the profit of the day is \max\limits_{l \le i \le r}a_il≤i≤rmax​ai​). The total profit of his practice is the sum of the profits over all kk days of his practice.

You want to help Polycarp to get the maximum possible total profit over all valid ways to solve problems. Your task is to distribute all nn problems between kk days satisfying the conditions above in such a way, that the total profit is maximum.

For example, if n = 8, k = 3n=8,k=3 and a = [5, 4, 2, 6, 5, 1, 9, 2]a=[5,4,2,6,5,1,9,2], one of the possible distributions with maximum total profit is: [5, 4, 2], [6, 5], [1, 9, 2][5,4,2],[6,5],[1,9,2]. Here the total profit equals 5 + 6 + 9 = 205+6+9=20.

Input

The first line of the input contains two integers nn and kk (1 \le k \le n \le 20001≤k≤n≤2000) --- the number of problems and the number of days, respectively.

The second line of the input contains nn integers a_1, a_2, \dots, a_na1​,a2​,...,an​ (1 \le a_i \le 20001≤ai​≤2000) --- difficulties of problems in Polycarp's list, in the order they are placed in the list (i.e. in the order Polycarp will solve them).

Output

In the first line of the output print the maximum possible total profit.

In the second line print exactly kk positive integers t_1, t_2, \dots, t_kt1​,t2​,...,tk​ (t_1 + t_2 + \dots + t_kt1​+t2​+⋯+tk​ must equal nn), where t_jtj​ means the number of problems Polycarp will solve during the jj-th day in order to achieve the maximum possible total profit of his practice.

If there are many possible answers, you may print any of them.

Sample 1

Inputcopy Outputcopy
8 3 5 4 2 6 5 1 9 2 20 3 2 3

Sample 2

Inputcopy Outputcopy
5 1 1 1 1 1 1 1 5

Sample 3

Inputcopy Outputcopy
4 2 1 2000 2000 2 4000 2 2

Note

The first example is described in the problem statement.

In the second example there is only one possible distribution.

In the third example the best answer is to distribute problems in the following way: [1, 2000], [2000, 2][1,2000],[2000,2]. The total profit of this distribution is 2000 + 2000 = 40002000+2000=4000.

题目翻译

给定长度为n的序列,要求分成k段,最大化每段最大值的和

复制代码
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<string.h>
#include<climits>
#include<map>
#include<algorithm>
typedef long long ll;
using namespace std;
const int N = 2010;
int n, k;

struct node {
	int num, val;
}mm[N];

bool cmp1(node n1, node n2)
{
	return n1.val > n2.val;
}

bool cmp2(node n1, node n2)
{
	return n1.num < n2.num;
}

int main()
{
	cin >> n >> k;
	for (int i = 1; i <= n; i++)
	{
		int num;cin >> num;
		mm[i].num = i;
		mm[i].val = num;
	}

	sort(mm + 1, mm + n + 1, cmp1);//先对整个序列按照数值的大小进行排序,去前k个数的和

	int sum = 0;
	for (int i = 1; i <= k; i++) sum += mm[i].val;

	sort(mm + 1, mm + k + 1, cmp2); //在对前k个数进行排序,做差分组

	cout << sum << endl;

	for (int i = 1; i < k; i++) cout << mm[i].num - mm[i - 1]. num << " ";
	cout << n - mm[k - 1].num << endl;

	return 0;
}
相关推荐
C雨后彩虹3 小时前
任务最优调度
java·数据结构·算法·华为·面试
少林码僧4 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)4 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
Niuguangshuo5 小时前
EM算法详解:解密“鸡生蛋“的机器学习困局
算法·机器学习·概率论
a3158238065 小时前
Android 大图显示策略优化显示(一)
android·算法·图片加载·大图片
一条大祥脚6 小时前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
鲨莎分不晴6 小时前
反向传播的数学本质:链式法则与动态规划的完美共舞
算法·动态规划
sonadorje6 小时前
逻辑回归中的条件概率
算法·机器学习·逻辑回归
cici158746 小时前
基于Pan-Tompkins算法的ECG信号HRV提取方案
算法
McGrady-1756 小时前
拓扑导航 vs 几何导航的具体实现位置
算法