poj 3253---Fence Repair
来源:互联网 发布:excel多列重复数据筛选 编辑:程序博客网 时间:2024/05/16 14:38
优先队列的最有价值的地方不在于它将一个序列作了一个排列,而是这样一种数据结构它能够快速地将一个序列中最大或最小的几个元素选取出来
参考: http://blog.csdn.net/lyy289065406/article/details/6647423 的解法
首先整个问题的结构可以使用Huffman思想 , 问题是如何高效地构建Huffman code ,方法是使用 优先队列。
这样一种将问题转化的思想着实很精妙~
#include <iostream>using namespace std;__int64 sum = 0;void sift(__int64 r[], int k, int m){int i = k;int j = 2*i;while(j<=m){if(j<m && r[j] > r[j+1]) j++;if(r[i] < r[j]) break;else{__int64 temp = r[j];r[j] = r[i];r[i] = temp;i = j;j = i*2;}}return;}void compute(__int64 r[] , int m){__int64 delta = 0;delta += r[1];r[1] = r[m];sift(r,1,m-1);delta += r[1];r[1] = delta;sift(r,1,m-1);sum += delta;return;}int main(){ int n; while(cin>>n) { __int64 * arr = new __int64[n+1]; for(int i = 1; i <= n ; i++){cin>>arr[i];}for(int i = n/2 ; i>=1 ; i-- ){sift(arr,i,n);}if(1 == n)sum+=arr[1];elsefor(int j = 0; j <= n-2 ; j++){compute(arr,n-j);}cout<<sum<<endl; } //system("pause"); return 0; }
0 0
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- POJ 3253Fence Repair
- POJ--3253 -- Fence Repair
- poj-3253-Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- poj 3253 Fence Repair
- POJ - 3253 Fence Repair
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- poj 3253---Fence Repair
- linux 下网络编程结构体定义对应的头文件
- MHL中的packedpixel概念
- 2014第六周阅读
- 怎么把坏硬盘中的文件恢复回来
- Linux下的四种I/O model
- poj 3253---Fence Repair
- 初识设计模式 chapter 04-工厂模式
- 第五周项目4指向学生类的指针
- Andriod开发 放大缩小功能
- qt翻译QPointer
- bash 学习!
- 指针变量内存
- C语言结构体里的成员数组和指针
- 剑指offer:写出高质量代码