• 7-4 修理牧场 (优先队列)


    优先队列(priority_queue)

    priority_queue本质是一个堆。

    1. 头文件:#include <queue>

    2. 关于priority_queue中元素的比较
        模板申明带3个参数:priority_queue<Type, Container, Functional>,其中Type 为数据类型,Container为保存数据的容器,Functional 为元素比较方式。
        Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector。
      比较方式默认用operator<,所以如果把后面2个参数缺省的话,优先队列就是大顶堆(降序),队头元素最大。特别注意pair的比较函数。

    3. 声明
      从小到大: priority_queue<int,vector<int>,greater<int> > q; (小顶堆,升序) ex:1 2 3 4 5

    从大到小: priority_queue<int,vector<int>,less<int> > q; (大顶堆,降序) ex:5 4 3 2 1

    7-4 修理牧场 (25分)

    农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。

    但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。

    请编写程序帮助农夫计算将木头锯成N块的最少花费。

    输入格式:
    输入首先给出正整数N(≤10​^4),表示要将木头锯成N块。第二行给出N个正整数(≤50),表示每段木块的长度。

    输出格式:
    输出一个整数,即将木头锯成N块的最少花费。

    输入样例:

    8
    4 5 1 2 1 3 1 1
    

    输出样例:

    49
    

    实验代码

    #include<iostream>
    #include<queue>
    using namespace std;
    int main()
    {
    	int n, m;
    	priority_queue<int, vector<int>, greater<int> > q; //这里是优先队列没有省略的写法(具体说明如下)
    	                                                   //第一个参数是队列元素的类型,第二个是用来保存元素的容器类型,第三个是排序
    	                                                  //  这个就视情况而定了     默认就是vector       greater是升序,less是降序
    	cin >> n;
    	for (int i = 0; i < n; i++)
    	{
    		cin >> m;
    		q.push(m);
    	}
    	int sum = 0;
    	while (!q.empty())
    	{
    		int x = q.top();
    		q.pop();
    		if (q.empty())
    			break;
    		int y = q.top();
    		q.pop();
    		x = x + y;
    		sum = sum + x;
    		q.push(x);
    	}
    
    	cout << sum << endl;
    	return 0;
    }
    
  • 相关阅读:
    解决 搭建Jekins过程中 启动Tomcat的java.net.UnknownHostException异常
    射手和农场主
    java 和 JS(javaScript)中的反斜杠正则转义
    分享修改密码的SharePoint Web part: ITaCS Change Password web part
    分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
    Office 365 的公共网站的一些限制及解决的办法
    SharePoint 2013 关闭 customErrors
    安装 KB2844286 导致SharePoint 2010 XSLT web part 显示出现错误
    安装Office Web Apps Server 2013 – KB2592525安装失败
    如何将hyper-v虚拟机转换成vmware的虚拟机- 转换SharePoint 2010 Information Worker Demonstration and Evaluation Virtual Machine (SP1)
  • 原文地址:https://www.cnblogs.com/xirfly/p/12523978.html
Copyright © 2020-2023  润新知