当前位置: 首页 > news >正文

POJ 3253 Fence Repair 优先队列

看题传送门::http://poj.org/problem?id=3253


题目大意:

给定n个小木板的长度,一个农夫要把一个无限长的木板锯成给定的目标,每一次锯的长度就是费用,求最小费用。

hints:

目标长度为:8 5 8

起初的木板长度为8+5+8=21

第一切将会花费21 ,将 切为13 和 8 两块。

第二次将会花费13 ,将13那块切为 8 和 5 两块。


贪心算法。

一开始想错,以为每次切掉最长的,其实不然,没有理解题意。

其实题目说的是每次切掉部分的两块的和才为费用。

dicuss里有大神的关于Huffman树的思路“

我们不妨将切木板的过程反过来看,也就是将所有切好了的木板每次拿两块拼接起来(每次拼接后的长度就是费用),最终便会拼接成原来的完整的木板。显然,这个过程是Huffman编码过程,且正过程和逆过程费用相同”

所以利用这个思想,每次选取最短的两个木板,构成新的木板,并重新插入优先队列中。

用到了STL的优先队列

#include<cstdio>
#include<queue>
using namespace std;
const int MAXN=50000+10;
struct data
{
	__int64 need;

	bool operator <(const data& p)const
	{
		return need > p.need;
	}
};


priority_queue<data> q;
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		data s;
		for(int i=0;i<n;i++)
		{
			scanf("%I64d",&s.need);
			q.push(s);
		}
		__int64 ans=0;
		while(q.size()>1 )
		{
			int k1=q.top().need;
			q.pop();
			int k2=q.top().need;
			q.pop();
			data temp;
			temp.need=k1+k2;
			ans+=temp.need;
			q.push(temp);

		}
		printf("%I64d\n",ans);

		while(!q.empty())  //清空队列  
			q.pop();  
	}
}


转载于:https://www.cnblogs.com/murmured/p/5004256.html

相关文章:

  • 死机后ie不能执行脚本
  • 解决浮动元素不在一行
  • oracle性能学习中总结
  • 《iPhone iPad 开发实战》已由海洋出版社出版
  • 数据库定义语言
  • iPhone开发中混用objc,c,c++的一些问题
  • 第二章数据和判定
  • Android中ViewGroup等容器控件的使用
  • 软考--数据通信与网络基础
  • shell--字符串比较,整数比较,文件比较
  • SQL查询有关 sql_variant 值的基本数据类型和其他信息
  • struts2常量的配置
  • HTML5判断设备在线离线及监听网络状态变化例子
  • ntc:iBatis的demo
  • Linux RAID简介
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【391天】每日项目总结系列128(2018.03.03)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Angular 响应式表单之下拉框
  • co模块的前端实现
  • emacs初体验
  • mysql中InnoDB引擎中页的概念
  • opencv python Meanshift 和 Camshift
  • python docx文档转html页面
  • Python利用正则抓取网页内容保存到本地
  • ReactNativeweexDeviceOne对比
  • React-redux的原理以及使用
  • Redis中的lru算法实现
  • Vue学习第二天
  • zookeeper系列(七)实战分布式命名服务
  • 初识 beanstalkd
  • 基于Android乐音识别(2)
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 聊一聊前端的监控
  • 前端技术周刊 2019-02-11 Serverless
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 小而合理的前端理论:rscss和rsjs
  • 一个SAP顾问在美国的这些年
  • Nginx实现动静分离
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #预处理和函数的对比以及条件编译
  • (+4)2.2UML建模图
  • (c语言)strcpy函数用法
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (待修改)PyG安装步骤
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (四) 虚拟摄像头vivi体验
  • (一) springboot详细介绍
  • (一)RocketMQ初步认识
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core 6 集成和使用 mongodb
  • ??eclipse的安装配置问题!??