【贪心】最优合并问题
来源:互联网 发布:魔卡幻想 淘宝 编辑:程序博客网 时间:2024/06/05 10:49
最优合并问题
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
给定k 个排好序的序列s1 , s2,……, sk , 用2 路合并算法将这k 个序列合并成一个序列。假设所采用的2 路合并算法合并2 个长度分别为m和n的序列需要m + n -1次比较。试设计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。
为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。
对于给定的k个待合并序列,计算最多比较次数和最少比较次数合并方案。
Input
输入数据的第一行有1 个正整数k(k≤1000),表示有k个待合并序列。接下来的1 行中,有k个正整数,表示k个待合并序列的长度。
Output
输出两个整数,中间用空格隔开,表示计算出的最多比较次数和最少比较次数。
Example Input
4
5 12 11 2
Example Output
78 52
#include <iostream>#include <algorithm>using namespace std;//头文件#include <algorithm>//sort(数组名,数组名+要排序的元素个数) 函数作用:递增排序//reversr(数组名,数组名+要排序的元素个数) 函数作用:逆置数组int main(){ int k; cin>>k; int* a=new int[k]; int* b=new int[k]; for(int i=0;i<k;i++) { cin>>a[i]; b[i]=a[i]; } sort(a,a+k); int min_sum=0; int min_mark=0; while(min_mark<k-1) { min_sum= min_sum+a[min_mark]+a[min_mark+1]-1; a[min_mark]=a[min_mark]+a[min_mark+1]; a[min_mark+1]=0; min_mark++; sort(a,a+k); } sort(b,b+k); int max_sum=0; int max_mark=0; for(int hh=1;hh<=k-1;hh++) { max_sum=max_sum+b[k-1]+b[k-2]-1; b[k-1]=b[k-1]+b[k-2]; b[k-2]=0; sort(b,b+k); } cout<<max_sum<<" "; cout<<min_sum; return 0;}
阅读全文
0 0
- 【贪心】最优合并问题
- 贪心-最优装载问题
- 贪心,最优装载问题
- 最优合并问题
- 最优合并问题
- 算法 最优合并问题
- 最优合并问题
- 最优合并问题
- 最优合并问题
- 最优合并问题
- 最优合并问题
- 贪心入门--最优装载问题
- 最优装载问题(贪心)
- 最优分解问题-贪心算法
- 贪心算法:最优分解问题
- 贪心算法 最优装载问题
- 最优装载问题--贪心算法
- 贪心:最优服务次序问题
- 线段树学习笔记及模板
- 【机房收费】这一路走来的弯路
- WebCrawler-HttpClient
- servlet简介及ServletContext对象
- 螺旋矩阵
- 【贪心】最优合并问题
- WebService学习(二)——WebService相关概念介绍
- 20171031js 中 string 转function
- ASP.NET
- J
- maven安装 配置 与简单demo
- 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 数学课(Math)和平均值(avg),方法包括求
- 第3章任务1:判断学生成绩是否有效
- 输入学生人数和成绩并判断出最高分和总分