首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

(贪心5.2.2)UVA 10954 Add All(利用数据的有序化回进行贪心选择)

2013-10-11 
(贪心5.2.2)UVA 10954Add All(利用数据的有序化来进行贪心选择)本题实际上求的是n-1个数和的总和的/* * UV

(贪心5.2.2)UVA 10954 Add All(利用数据的有序化来进行贪心选择)

本题实际上求的是n-1个数和的总和的

/* * UVA_10954.cpp * *  Created on: 2013年10月10日 *      Author: Administrator */#include <iostream>#include <cstdio>using namespace std;const int maxn = 5010;int n;int a[maxn];void sift(int i){a[0] = a[i];int k = i << 1;while(k <= n){if(k < n && a[k] > a[k+1]){k++;}if(a[0] > a[k]){a[i] = a[k];i = k;k = i << 1;}else{k = n + 1;}}a[i] = a[0];}void work(){int i;for(i = n >> 1 ; i ; i--){sift(i);}long long ans = 0;while(n!=1){swap(a[1],a[n--]);sift(1);a[1] += a[n+1];ans += a[1];sift(1);}printf("%lld\n",ans);}int main(){while(scanf("%d",&n)!=EOF,n){int i;for(i = 1 ; i <= n ; ++i){scanf("%d",&a[i]);}work();}return 0;}


热点排行