poj 3253 Fence Repair (优先队列,哈弗曼)
2024-09-30 17:54:06
题目链接:http://poj.org/problem?id=3253
题意:给出n块木板的长度L1,L2...Ln,求在一块总长为这个木板和的大木板中如何切割出这n块木板花费最少,花费就是将木板切割前的长度。
有个陷阱就是需要用long long 去储存
如
Sample Input
3
8
5
8
Sample Output
34
就是将一块长为21的木板先切成13和8,花费21。然后将13切成5和8,花费13,总花费21 + 13 = 34。
分析:如果考虑从一块木板分割成小木板,方法数会有很多种,其实可以转化成从小木板合成大木板。
其实就是构造一棵最优二叉树(哈夫曼树),然后求出这棵树带权路径长度,过程如下:
题目可以转化为Huffman树构造问题 :
给定 N planks of woods,
1. 在 N planks 中每次找出两块长度最短的木板,然后把它们合并,加入到集合A中,
2. 在集合中找出两块长度最短的木板,合并加入到集合A中,重复过程,直到集合A中只剩下一个元素
显然,通过每次选取两块长度最短的木板,合并,最终必定可以合并出长度为 Sum(Li)的木板,并且可以保证总的耗费最少
所以采用优先队列,每次都取出两块最短的木板,然后结果加上这两块木板长度,再入队(这两块木板长度之和),直到木板之和为一块
#include<bits/stdc++.h>
const long long maxn = 2e4+;
using namespace std;
int main()
{
priority_queue<long long,vector<long long>, greater<long long> > q;
long long n;
scanf("%lld", &n);
if(n == )
{
long long l;
scanf("%lld", &l);
printf("%d\n", l);
return ;
}
if(n == )
{
long long l1, l2;
scanf("%lld %lld", &l1, &l2);
printf("%d\n",l1+l2);
return ;
}
while(n--)
{
long long t;
scanf("%lld", &t);
q.push(t);
}
long long res = ;
do
{
long long t1 = q.top();q.pop();
long long t2 = q.top();q.pop();
// printf("%d %d\n", t1, t2);
q.push(t1+t2);
res += t1+t2;
}while(q.size()!= );
printf("%lld\n",res);
return ;
}
最新文章
- ABP(现代ASP.NET样板开发框架)系列之12、ABP领域层——工作单元(Unit Of work)
- openssl 证书操作命令
- java mybatis 中sql 模糊查询
- 学习笔记-Kuaihu(仿知乎日报)
- Eclipse代码风格
- iOS-CALayer图片淡入淡出动画
- linux设置主机名
- Nginx启动SSL功能,并进行功能优化,你看这个就足够了
- 从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试
- javaWeb实现使用邮箱邮件找回密码功能
- libc++abi.dylib handler threw exception
- iOS UILabel 使用姿势大全(标红关键字)
- Please verify you invoked Maven from the correct directory
- [置顶] Android开发之Thread类分析
- Python数据分析之路(一)查询和统计
- MySQL在字段中使用select子查询
- iOS应用程序工程文件以及启动流程
- 分布式系统监视zabbix讲解九之使用snmp监控windows--技术流ken
- 处理程序“SimpleHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 先装 .Net 后装 IIS
- day12作业答案
热门文章
- 手机端实现6位短信验证码input输入框效果(样式及代码方法)
- 利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减 直至765398并保持此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动 ,当数码管上数减到停止时,实验板上流水灯出停止然后全部开始闪烁,3秒后(用 T0定时)流水灯全部关闭,数码管上显示出“HELLO”,到此保持住
- Zznu 1913: yifan and matrix (多路归并)
- ssrs 2016, mobile report error: The report may be misconfigured, the data may not be available, or the server version may be unsupported.
- Hibernate3中重复引用hbm文件错误信息记录
- TestNG基本注解(二)
- 455 Assign Cookies 分发饼干
- C. Two strings 二分 + 预处理
- 通过 DBCA 工具创建Oracle数据库
- js中,浏览器中不同元素位置属性解析