【ACM/ICPC训练】修理牧场
2017-12-03 19:57
260 查看
【ACM/ICPC训练】修理牧场
题目描述
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li
个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是L
i
的总和。
但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。
请编写程序帮助农夫计算将木头锯成N块的最少花费。
输入
输入首先给出正整数N(≤104),表示要将木头锯成N块。第二行给出N个正整数(≤50),表示每段木块的长度。输出
输出一个整数,即将木头锯成N块的最少花费。
样例输入
84 5 1 2 1 3 1 1
样例输出
49代码
#include <stdio.h> void swap(int &a,int &b){ a^=b; b^=a; a^=b; } void FindTwoMin(int L[],int N){ for(int i=0;i<N-1;i++){//min1 if(L[i]<L[i+1]){ swap(L[i],L[i+1]); } } for(int i=0;i<N-2;i++){//min2 if(L[i]<L[i+1]){ swap(L[i],L[i+1]); } } } int main() { int N; int Sum=0; scanf("%d",&N); int L ; for(int i=0;i<N;i++){ scanf("%d",&L[i]); } while(N>=2){ FindTwoMin(L,N); // for(int i=0;i<N;i++)printf("%d ",L[i]);printf("\n"); L[N-2]+=L[N-1]; Sum+=L[N-2]; // printf("%d",Sum); N--; } printf("%d",Sum); return 0; }
相关文章推荐
- 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15)训练总结【7/10】
- 【DP 训练】Stamps and Envelope Size, ACM/ICPC World Finals 1995, UVa242
- 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D】---暑假三校训练
- 北京大学ACM/ICPC竞赛训练暑期课练习之怪盗基德的滑翔翼
- 【ACM/ICPC训练】委派任务
- 【DP 训练】Alibaba, ACM/ICPC SEERC 2004, UVa1632
- 关于参加ACM-ICPC的 ACMer的 个人训练问题
- 【组队训练】2016 ACM/ICPC Asia Regional Dalian Online
- 2015 ACM-ICPC China Shanghai Metropolitan Programming Contest训练总结【6/10】
- 周末训练笔记+2017 ACM/ICPC Asia Regional Qingdao+Xian Online(9.17)
- 2015 ACM/ICPC Asia Regional Hefei Online训练总结【5/10】
- 周六训练:2013 ACM-ICPC长沙赛区全国邀请赛
- 周末训练笔记+ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛+2017 ACM-ICPC 亚洲区(南宁赛区)网络赛(9.23,9.24)
- ACM-ICPC训练行动路线图
- 【组队训练】2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest
- 【DP 训练】Cake Slicing, ACM/ICPC Nanjing 2007, UVa1629
- 北京大学ACM/ICPC竞赛训练暑期课练习之泰国佛塔
- 【DP 训练】Folding, ACM/ICPC NEERC 2002, UVa1630
- ZOJ 3809 The Himalayas (2014 ACM/ICPC 牡丹江站 网络预选赛 A 题)
- hdu 5877/ 2016 ACM/ICPC Dalian Online 1010 Weak Pair