贪心法-Fence Repair POJ - 3253
2017-07-02 20:55
344 查看
为了保证开销最少,每次切割采用贪心原则,找最小的两块视为相邻的两块,再递归求解
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;//由于长度最多为50000,个数最多为20000,所以最后的开销可能会爆int
int a[20010];
int main()
{
int n;
ll ans;
cin>>n;
ans = 0;
for(int i = 0; i < n; i++)
cin>>a[i];
while(n > 1)
{
int mi1 = 0;
int mi2 = 1;
if(a[mi1] > a[mi2])swap(mi1,mi2);//注意是交换脚标
for(int i = 2; i < n; i++)
{
if(a[i] < a[mi1])
{
mi2 = mi1;
mi1 = i;
}
else if(a[i] < a[mi2])
mi2 = i;
}
int t = a[mi1] + a[mi2];
ans += t;
/*把和放到a[mi1]里,由于两部分合上之后会减少一部分,最后的一部分会消失,所以需要将那部分放到a[mi2]里。
如果mi1恰好是最后一个脚标,那么即使它不存在也没有关系,但是需要把和存在a[mi1]里所以将mi1与mi2调换一下,
如果mi2是最后一个由于不存放和所以即使没有也无关紧要*/
if(mi1 == n - 1)swap(mi1,mi2);
a[mi1] = t;
a[mi2] = a[n - 1];
n--;
}
cout<<ans<<endl;
return 0;
}
相关文章推荐
- POJ 3253 Fence Repair STL 优先队列
- Fence Repair POJ - 3253
- poj-3253 Fence Repair **
- 【原创】【合并类贪心】POJ 3253 1862 2709; Fence Repair && Stripies && Painter
- Fence Repair POJ - 3253 (贪心!!哈夫曼最小二叉树)
- POJ 3253 Fence Repair Huffman
- Fence Repair POJ - 3253
- Fence Repair POJ 3253
- poj 3253 Fence Repair greater<int>
- POJ 3253 Fence Repair C++ STL multiset 可解
- POJ 3253 Fence Repair G++
- POJ—3253—Fence Repair—【贪心】【优先队列】
- 刷题——Fence Repair POJ - 3253
- Fence Repair POJ - 3253 最小优先队列,哈弗曼树
- 贪心法 Fence Repair POJ 3253 霍夫曼(Huffman)编码原理 acmclub 12326
- POJ 3253 贪心法,优先队列
- 区间DP与贪心算法的联系(uav Cutting Sticks && poj Fence Repair(堆的手工实现))
- POJ 3253 fence repair 贪心法 huffman
- POJ Fence Repair-哈夫曼树思想
- POJ Fence Repair(优先队列)