最优合并问题

学了贪心算法后的作业:

/*

*作者 neeso
*完成日期:2018/4/22
*问题名称:最优合并问题
*问题描述:
 给定k个排好序的序列s1,s2,…,sk,(从input.txt中读入序列个数,以及单个序列的长度)用2路合并算法将这k个序列合并成一个序列
 。假设所采用的2路合并算法合并两个长度分别为m和n的序列需要m+n-1次比较。
 试设计一个算法确定合并这个序列的最优合并顺序,使所需要的总比较次数最少
 和最多。并输出到output.txt 中,(最少在前,最多在后)
 */
#include<iostream>
#include<stdio.h>
#include <algorithm>
#include<vector>
#include<fstream>
using namespace std;
bool compare(int a, int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序
}
void zuiyouhebin()
{
int i;
int number ;
int sum_max = 0;
int sum_min = 0;
ifstream infile("input.txt", ios::in);
infile >> number;
int* a = new int[number];
// int a[] = { 5, 12, 11, 2 };
int *b = new int[number];
for (i = 0; i < number; i++)
{
infile >> a[i];
}
infile.close();
for (i = 0; i < number; i++)
{
b[i] = a[i];
}
for (i = 0; i < number - 1; i++)
{
sort(a + i, a + number,compare);
a[i + 1] += a[i];
sum_max += (a[i + 1] - 1);
}
for (i = 0; i < number - 1; i++)
{
sort(a + i, a + number);
a[i + 1] += a[i];
sum_min += (a[i + 1] - 1);
}
cout << sum_min<<endl;//用来检验输出
cout << sum_max << endl;//用来检验输出
ofstream outfile("output.txt", ios::out);
outfile << sum_min<< '\t' << sum_min;
    outfile.close();
system("pause");
}
int main()
{
zuiyouhebin();
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值