BZOJ 1724 切割木板】的更多相关文章

合并果子. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define maxn 50050 using namespace std; ; priority_queue <long long,vector<long long>,greater<long long> > q; i…
题目 1724: [Usaco2006 Nov]Fence Repair 切割木板 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000).然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和.接下来的工作,当然是把它锯成需要的长度.FJ忽略所有切割时的损失—…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1724 题意: 你要将一块长木板切成n段,长度分别为a[i](长木板的长度 = ∑ a[i]). 每一次切割的花费为被切割木板的长度. 问你切完的最小花费. 题解: 合并果子. 反过来想:切割 = 合并 贪心策略:每次选目前所有堆中最小的两个合并.(尽可能少移动大的果子堆) 实现:优先队列 AC Code: #include <iostream> #include <stdio.h…
Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000).然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和.接下来的工作,当然是把它锯成需要的长度.FJ忽略所有切割时的损失——你也应当忽略它. FJ郁闷地发现,他并没有锯子来把这块长木板锯开.于是他把这块长木板带到了Farmer Don的农场,想向FD借用锯子. 作为一个有商业头脑的资…
倒过来看 , 每次总是选择最短的两块木板合并 , 用heap维护 ------------------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue>   #define rep( i , n )…
1724: [Usaco2006 Nov]Fence Repair 切割木板 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 854  Solved: 426[Submit][Status] Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000).然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的…
Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1356  Solved: 714[Submit][Status][Discuss] Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000).然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和.接下来的工作,当然是把它锯成需要的长度.FJ忽略所…
倒着的石子合并,注意不是取当前最长木板贪心做,而是取当前最小累加答案: 例如 4 5 6 7 若按第一种思路:ans=22+15+9 第二种:ans=22+13+9,可以先从中间某一块分开,这样答案更优 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #define ll long long using namespace std; ; inline int read(){ ,x=; ;…
如果反着看,看成合并木板,就和合并果子一样了,把若干块放进一个小根堆,然后每次取出两个合并,把合并结果加进答案和堆里 代码里小根堆用优先队列实现(懒 #include<iostream> #include<cstdio> #include<queue> using namespace std; const int N=20005; int n; priority_queue<int,vector<int>,greater<int> >…
[算法]贪心+堆 #include<cstdio> #include<algorithm> using namespace std; ; int n,heap[maxn],sz; void heap_push(int x) { heap[++sz]=x;//新数入堆底 int now=sz;//以堆底为起点 &&heap[now]<heap[now>>])//非根节点的父亲>儿子时------注意非根判断 { swap(heap[now],h…