题目大意:

输入N ( 1 ≤ N ≤ 20,000 ) ;将一块木板分为n块

每次切割木板的开销为这块木板的长度,即将长度为21的木板分为13和8,则开销为21

接下来n行描述每块木板要求的长度Li ( 1 ≤ Li ≤ 50,000 )

木板长度恰好等于各段木板长之和

Sample Input

3
8
5
8

Sample Output

34

挑战上的一个奇妙的贪心的方法

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,L[];
int main()
{
while(~scanf("%d",&n))
{
memset(L,,sizeof(L));
for(int i=;i<n;i++) scanf("%d",&L[i]);
ll ans=; /// 从结果L[]倒推
while(n>)
{
int i0=,i1=; // 维护最小段和次小段的下标
if(L[i0]>L[i1]) swap(L[i0],L[i1]);
for(int i=;i<n;i++)
if(L[i]<L[i0]) i1=i0,i0=i;
else if(L[i]<L[i1]) i1=i; int tmp=L[i0]+L[i1];// 将两段合并
ans+=(ll)tmp; // 开销为长度 /* 舍弃L[i0]和L[i1] 并将合并后的tmp保存在L[]中
就是总共只舍弃一段
而因为段数n随着合并会不断缩小
所以把要舍弃的一段放在n-1的位置即可 *若i0或i1有一个为n-1 则让i1为n-1
将tmp放在i0中 i1舍弃
*若i0和i1都不为n-1 则L[n-1]是需要被保留的
将tmp放在i0中 L[n-1]放在i1中
*/
if(i0==n-) swap(i0,i1);
L[i0]=tmp; L[i1]=L[n-];
n--;
}
printf("%lld\n",ans);
} return ;
}

可以借助优先队列高效实现

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int main()
{
while(~scanf("%d",&n))
{
priority_queue <int,vector<int>,greater<int> > q;
for(int i=;i<n;i++)
{
int m; scanf("%d",&m);
q.push(m);
}
ll ans=;
while(q.size()>)
{
int i0=q.top(); q.pop();
int i1=q.top(); q.pop();
int tmp=i0+i1;
ans+=(ll)tmp; //printf("%d %d %lld\n",i0,i1,ans);
q.push(tmp);
}
printf("%lld\n",ans);
} return ;
}

USACO 2006 November Gold Fence Repair /// 贪心(有意思)(优先队列) oj23940的更多相关文章

  1. USACO 2006 November Gold Corn Fields

    USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...

  2. USACO 2006 November Gold

    POJ 3253 Fence Repair STL堆操作 我想说,STL里堆是我目前见到最蛋疼的操作. #include <cstdio> #include <cstring> ...

  3. 【USACO 2006 November Gold】Corn Fields

    [题目链接] 点击打开链接 [算法] 状压DP [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 12 #def ...

  4. USACO 2006 November Gold Corn Fields /// 状压 oj23941

    题目大意: 输入n m 接下来n行m列 0表示不能种玉米 1表示能 要求种玉米位置的上下左右四连通区域不能种玉米 输出方案数 Sample Input 2 31 1 10 1 0 Sample Out ...

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

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

  6. poj 3253 Fence Repair (STL优先队列)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/34805369 转载请注明出 ...

  7. POJ 3253 Fence Repair (贪心)

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

  8. POJ 3253 Fence Repair 贪心+优先队列

    题意:农夫要将板割成n块,长度分别为L1,L2,...Ln.每次切断木板的花费为这块板的长度,问最小花费.21 分为 5 8 8三部分.   思路:思考将n部分进行n-1次两两合成最终合成L长度和题目 ...

  9. [USACO 2009 Feb Gold] Fair Shuttle (贪心+优先队列)

    题目大意:有N个站点的轻轨站,有一个容量为C的列车起点在1号站点,终点在N号站点,有K组牛群,每组数量为Mi(1≤Mi≤N),行程起点和终点分别为Si和Ei(1≤Si<Ei≤N).计算最多有多少 ...

随机推荐

  1. JavaWeb学习篇之----自定义标签&&JSTL标签库详解

    今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...

  2. Oozie框架介绍

    Oozie框架: 1.Oozie英文翻译:驯象人 2.Oozie简介 一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce.Pig Jobs的 ...

  3. Kafka Streams详细

    概述 1 Kafka Streams Kafka Streams.Apache Kafka开源项目的一个组成部分.是一个功能强大,易于使用的库.用于在Kafka上构建高可分布式.拓展性,容错的应用程序 ...

  4. NX二次开发-UFUN读取表格注释内容UF_TABNOT_ask_cell_text

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_tabnot.h> #include < ...

  5. PMP-49个过程快速导览

    启动过程组 名正言顺 人鬼佛神 01 -4.1制定项目章程 -授权PM,启动项目 ● 编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程 ● 明确项目与组织战略目标之间的联系,确立 ...

  6. ionic:安装

    ylbtech-ionic:安装 1.返回顶部 1. ionic 安装 本站实例采用了ionic v1.3.2 版本,使用的 CDN 库地址: <link href="https:// ...

  7. (转)Python学习笔记(1)__name__变量

    Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执行.每个文件(模块)都可以任意写一些没有缩进的代码,并在载入时自动执行.为了区分 主执行代码和被调用文件,Python引入 ...

  8. PAT_A1094#The Largest Generation

    Source: PAT A1094 The Largest Generation (25 分) Description: A family hierarchy is usually presented ...

  9. icmp隧道--icmpsh

    本地:ubantu 目标主机:windows 在ubantu上关闭自带的icmp回应 sysctl -w net.ipv4.icmp_echo_ighore_all=1 ubantu上启动 pip i ...

  10. Git 学习(三)Git 创建版本库

    获取 Git 仓库 什么是 Git 仓库呢,仓库又名版本库,我们可以把他理解为一个文件夹.这个文件夹里的所有东西都需要被 Git 给管理起来,对立面每个文件的修改.编辑.删除都将被 Git 记录,以便 ...