合并果子加强版
问题描述:有n堆果子,你可以选择最多其中m堆果子合并成一堆,合并的代价是这些果子数量之和,求最后合并成一堆果子的最少总代价。
文件输入:n,m(1<=m<=n<=10000)
以下n行为每堆果子数量(<=10000)
文件输出:一个数为最少总代价;
样例输入:
5 3
3 2 1 4 5
样例输出:21
分析:
该题要注意的是,若每次不能合并M堆,则应该放在第一次合并时,因为当每次合并M堆到最后不够M堆时,还是需要再合并一次,导致总代价增加。而第一次选一合适的堆合并,以后每次都合并M堆,这样总代价最小
解法1:
堆排序...
【例题4】光荣的梦想1635
Description:Prince对他在这片大陆上维护的秩序感到满意,于是决定启程离开艾泽拉斯。在他动身之前,Prince决定赋予King_Bette最强大的能量以守护世界、保卫这里的平衡与和谐。在那个时代,平衡是个梦想。因为有很多奇异的物种拥有各种不稳定的能量,平衡瞬间即被打破。KB决定求助于你,帮助他完成这个梦想。 一串数列即表示一个世界的状态。 平衡是指这串数列以升序排列。而从一串无序数列到有序数列需要通过交换数列中的元素来实现。KB的能量只能交换相邻两个数字。他想知道他最少需要交换几次就能使数列有序。
Input:第一行为数列...
查找第k小的数
问题描述:给定n个元素,要求从中找出第k小的元素。
文件输入:第一行两个整数:第一个是n表示有n个正整数(n<=50000),第二个整数k表示要查找第k小的元素; 第二行有n 个用空格隔开的整数。
文件输出:一个整数,第一个表示第k 小的元素的值。
样例输入:
5 3
23 8 91 56 4
样例输出:
23
#include<iostream>
using namespace std;
int a[20001],k;
int search(int le,int ri)
{
if(le==ri)return a[l...
报表难题
问题描述:给出n个数,求相邻两个数绝对值之差的最小值。有两种操作,一种是Q(表示你需要回答目前这些数的相邻两个数绝对值之差的最小值),一种是k(表示删原第K个数)。
文件输入:n,m(n,m<=100000)
n个数
以下每行一个共m个操作
文件输出:对应Q的回答
样例输入:
5 3
1 2 5 8 14
Q
K 2
K 3
Q
样例输出:
1
6
解法1:
#include <iostream>
using namespace std;
...