USACO 2006 November Gold Fence Repair /// 贪心(有意思)(优先队列) oj23940
题目大意:
输入N ( 1 ≤ N ≤ 20,000 ) ;将一块木板分为n块
每次切割木板的开销为这块木板的长度,即将长度为21的木板分为13和8,则开销为21
接下来n行描述每块木板要求的长度Li ( 1 ≤ Li ≤ 50,000 )
木板长度恰好等于各段木板长之和
3
8
5
8
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的更多相关文章
- USACO 2006 November Gold Corn Fields
USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...
- USACO 2006 November Gold
POJ 3253 Fence Repair STL堆操作 我想说,STL里堆是我目前见到最蛋疼的操作. #include <cstdio> #include <cstring> ...
- 【USACO 2006 November Gold】Corn Fields
[题目链接] 点击打开链接 [算法] 状压DP [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 12 #def ...
- USACO 2006 November Gold Corn Fields /// 状压 oj23941
题目大意: 输入n m 接下来n行m列 0表示不能种玉米 1表示能 要求种玉米位置的上下左右四连通区域不能种玉米 输出方案数 Sample Input 2 31 1 10 1 0 Sample Out ...
- POJ 3253 Fence Repair 贪心 优先级队列
Fence Repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 77001 Accepted: 25185 De ...
- poj 3253 Fence Repair (STL优先队列)
版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/34805369 转载请注明出 ...
- POJ 3253 Fence Repair (贪心)
Fence Repair Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- POJ 3253 Fence Repair 贪心+优先队列
题意:农夫要将板割成n块,长度分别为L1,L2,...Ln.每次切断木板的花费为这块板的长度,问最小花费.21 分为 5 8 8三部分. 思路:思考将n部分进行n-1次两两合成最终合成L长度和题目 ...
- [USACO 2009 Feb Gold] Fair Shuttle (贪心+优先队列)
题目大意:有N个站点的轻轨站,有一个容量为C的列车起点在1号站点,终点在N号站点,有K组牛群,每组数量为Mi(1≤Mi≤N),行程起点和终点分别为Si和Ei(1≤Si<Ei≤N).计算最多有多少 ...
随机推荐
- vue中使用axios与axios的请求响应拦截
VUE中使用Axios axios的安装 npm install axios vue-axios axios在vue的配置与使用 在main.js中引入axios和vue-axios import a ...
- css制作旋转风车(transform 篇)
做这个案例之前首先要大概了解CSS的transform的属性 transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜. 看看效果图 打开的时候自动旋转 ...
- 【Codeforces 1148B】Born This Way
[链接] 我是链接,点我呀:) [题意] 有人要从A地飞向B地,然后从B地飞向C地. 给出A,B地的n.m个航班的出发时间. 已知从A到B的航班都是ta和tb时长到达B.C 只有到达B的时候航班还没起 ...
- Android中使用占位符
Android中占位符的使用 有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法. strings.xml中节点是支持占位符的,如下所示: < ...
- electron-vue构建桌面应用
一.项目搭建 electron-vue是vue-cli和electron结合的项目,比单独使用vue构建起的electron项目要方便很多. 1.初始化项目并运行 vue init simulated ...
- mac 安装并使用 mysql 或者 mac mysql 忘记密码,Can't connect to local MySQL server through socket homebrew
1. brew install mysql 2. 启动mysql mysql.server start 我遇到了这个error,查openstack解决,我在这粘一下 ### Error:Can't ...
- springboot 项目普通类中调用mapper或service接口
1.该类使用@Component注解 2.添加一个本类类型的静态字段 3.创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean 4.创建方法调用mapper或service接口 ...
- C++的指针常量和常量指针
这2个概念非常容易混淆,即使是老鸟,也有眩晕的时候,写此博文,加深记忆... 指针常量:一个指针,并且它是一个常量,它的值不许被改变: char *const p1 = "Hello!&qu ...
- mave打包spring项目成jar,启动报错:Offending resource: URL [
文章目录 错误 解决 错误 Offending resource: URL [jar:file:/Users/leesin/intellij-idea-workspace/rabbitMq_Consu ...
- 连接mysql并查询
1.将mysql-connector-java-5.1.7-bin.jar放入Jmeter安装目录的bin文件夹中 2.在顶层目录<测试计划>中加载驱动 3.添加JDBC Connecti ...