题目大意:背景大概是个资本家剥削工人剩余价值的故事。。。。有一块木板,要把它切成几个长度,切一次的费用是这整块被切木板的长度,例如将一个长度为21的木板切成2和19两块费用为21,切成两块的长度及顺序是可以自己定的,问最小费用是多少

思路:一个很明显的贪心思路是每次将最长切下来,这样后续切割就不会用到这根最长的木板,结果也就是最优的了。具体操作的时候可以倒过来想:有一系列切完的小木板,要将它们合并成一块大木板,费用为合并完后那个大木板的长度,问最小费用。这样,每次合并最小木板的思路就跃然纸上了-----每次将小木板中最小的两块木板合并,更新答案,将合并后的木板加到原来的木板中,由于每次要更新最小值,因此采取堆优化应该是不错的方式。

#include<cstdio>

#include<string.h>

#include<iostream>

using namespace std;

int heap[50009]={0},last=1;

void swap(int i,int j)

{

int temp=heap[i];heap[i]=heap[j];heap[j]=temp;

}

void add(int value)

{

int i=last;

heap[last++]=value;

while(heap[i]<heap[i>>1]&& i>1)

{

swap(i,i>>1);

i=i>>1;

}

}

void del()

{

heap[1]=heap[--last];

heap[last]=0;

int i=1,next;

next=heap[(i<<1)]<heap[(i<<1)+1]?i<<1:(i<<1)+1;

if ((i<<1)+1>=last)next=i<<1;

while(heap[i]>heap[next] && next<last)

{

swap(i,next);

i=next;

if ((i<<1)+1>=last)next=i<<1;elsenext=heap[(i<<1)]<heap[(i<<1)+1]? i<<1:(i<<1)+1;

}

}

int main()

{

int n,t;

__int64 ans=0;

scanf("%d",&n);

for(int i=1;i<=n;i++)

{

scanf("%d",&t);add(t);

}

for(int i=1;i<=n-1;i++)

{

int top=heap[1];del();

top+=heap[1];ans+=top;

del();add(top);

}

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

return 0;

}

调试结果:1WA 原因:heap写错了贡献了一次wa

自测数据:input:

10

56 123 7 123 41 4 1 33 54 78 64

Output:

1462

Poj3253:Fence Repair 【贪心 堆】的更多相关文章

  1. POJ3253 Fence Repair(贪心)

    分割木板的顺序是自由的,所以每次选择两块最短的板,组合在一起,增加队列,原来两个板出队,直到队列中为空或者仅仅剩下一个板时结束.这里使用优先队列较为方便. #include<iostream&g ...

  2. 优先队列 poj3253 Fence Repair

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 51411   Accepted: 16879 De ...

  3. POJ 3253 Fence Repair 贪心 优先级队列

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 77001   Accepted: 25185 De ...

  4. POJ 3253 Fence Repair (贪心)

    Fence Repair Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  5. Poj3253 Fence Repair (优先队列)

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 67319   Accepted: 22142 De ...

  6. poj-3253 fence repair(贪心题)

    题目描述: Farmer John wants to repair a small length of the fence around the pasture. He measures the fe ...

  7. 区间DP与贪心算法的联系(uav Cutting Sticks &amp;&amp; poj Fence Repair(堆的手工实现))

    由于,这两题有着似乎一样的解法所以将其放在一起总结比較,以达到更好的区分二者的差别所在. 一.区间DP uva的Cutting Sticks是一道典型的模板题. 题目描写叙述: 有一根长度为l的木棍, ...

  8. poj 3253 Fence Repair 贪心 最小堆 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=3253 题解 本题是<挑战程序设计>一书的例题 根据树中描述 所有切割的代价 可以形成一颗二叉树 而最后的代价总和是与子节点和深 ...

  9. poj3253 Fence Repair(贪心+哈夫曼 经典)

    https://vjudge.net/problem/POJ-3253 很经典的题,运用哈夫曼思想,想想很有道理!! 具体实现还是有点绕人,最后被long long卡了一下,看数据大小的时候单纯相乘了 ...

  10. POJ3253 Fence Repair【贪心】

    我们的小伙伴Bingo真的很调皮,他在上课的路上看到树上有个鸟窝,他就想去把他捅下来,但是鸟窝很高他够不到,于是他就到处找木棍,想把这些木棍接在一起,然后去捅鸟窝.他一共找了N跟木棍 (1 ≤ N ≤ ...

随机推荐

  1. 通用mapper的generator

    <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-genera ...

  2. Android利用已有控件实现自定义控件

    Android控件的基本介绍及使用自定义控件的意义         Android 本身提供了很多控件,自定义控件在android中被广泛运用,自定义控件给了我们很大的方便.比如说,一个视图为imag ...

  3. qt5.8使用qwebenginview注意事项

    环境qt5.8,vs2015(ui.webview必须要先show出来,不然加载不成功) 1.项目属性,c/c++,常规,附加包含目录,新增: $(QTDIR)\include\QtWebChanne ...

  4. log4j 日志分级处理

    log4j 配置文件: log4j.rootLogger=debug,stdout,debug,info,errorlog4j.appender.stdout=org.apache.log4j.Con ...

  5. 四次元新浪微博客户端Android源码

    四次元新浪微博客户端Android源码 源码下载:http://code.662p.com/list/11_1.html [/td][td] [/td][td] [/td][td] 详细说明:http ...

  6. 原创Couldn't read packet: Connection reset by peer 错误排查思路(推荐)

    作为一个运维 不是你懂多少知识才是你的价值 你有幸能遇到多少错误才是你的最大的价值 知识 你有我有大家有  错误我有你没有 这便是我的价值 我遇到一个错误 蛮难遇到的一个错误 所以想分享给大家 下面我 ...

  7. Bug的分类和管理流程

    1.按照严重程度划分 定义:是指Bug对软件质量的破坏程度,即BUG的存在将对软件的功能和性能产生怎样的影响 分类:系统崩溃.严重.一般.次要.建议 2.按优先级划分 定义:表示处理和修正软件缺陷的现 ...

  8. Python基础3 函数 变量 递归 -DAY3

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...

  9. Eclipse 下载 开源项目 maven依赖丢失和 Deployment Assembly 丢失

    周末下载了最新的jeecg的源码来瞅瞅,但是下载后发现,pom文件中定义的依赖都丢失了. 如下图 上网搜索了一下啊,发现需要先给这个项目这个项目 disable maven nature 然后再添加上 ...

  10. CPP-基础:inline

    背景: 在C&C++中 一.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionNam ...