7-29 修理牧场 (25分)

农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li
​​ 个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li
​​ 的总和。

但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。

请编写程序帮助农夫计算将木头锯成N块的最少花费。

输入格式:
输入首先给出正整数N(≤10^4),表示要将木头锯成N块。第二行给出N个正整数(≤50),表示每段木块的长度。

输出格式:
输出一个整数,即将木头锯成N块的最少花费。

输入样例:

8
4 5 1 2 1 3 1 1

输出样例:

49

思路:先排好序,每次都找最小的两个加到sum,然后调整数组(左移两位),再将新元素插入到有序序列中,有点儿类似于huffman树的构建!

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>void shellinsert(int *a,int n,int dk){//希尔插入函数int temp;for(int i=dk;i<n;i+=dk){if(a[i]<a[i-dk]){temp=a[i];int j;for(j=i-dk;j>=0&&a[j]>temp;j-=dk){a[j+dk]=a[j];}a[j+dk]=temp;}}
}void shellsort(int *a,int n){//希尔排序int dk[12]={5000,2500,1000,500,250,125,70,30,15,8,4,1};for(int i=0;i<12;i++){shellinsert(a,n,dk[i]);}
}void AdjustArray(int *a,int &len){//调整数组函数(将数组左移两位)for(int i=2;i<len;i++){a[i-2]=a[i];}len-=2;//不要忘了len=len-2哦!!
}void InsertElem(int *a,int &len,int e){//插入函数,将(a[0]+a[1])重新插入到数组int loc=len;//loc记录位置,初始为lenfor(int i=0;i<len;i++){//找位置过程if(a[i]>=e){//找到大于等于的就跳出loc=i;break;}}for(int i=len-1;i>=loc;i--){//开始右移a[i+1]=a[i];}a[loc]=e;//插入之len++;//len++
}int main(){int n;scanf("%d",&n);if(n==1){//只有一个不用锯,直接打印0,return 0;printf("0");return 0;}int a[n];for(int i=0;i<n;i++){scanf("%d",&a[i]);}shellsort(a,n);int sum=0;int len=n;while(1){sum+=a[0]+a[1];int ans=a[0]+a[1];AdjustArray(a,len);InsertElem(a,len,ans);if(len==1)break;}printf("%d",sum);return 0;
}

7-29 修理牧场 (25分)(PTA实验题)相关推荐

  1. python 7-33 修理牧场 (25 分) PTA

    农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li​个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li​的总和. 但是农夫自己没有锯子,请人锯木的 ...

  2. 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)

    基础实验4-2.7 修理牧场 (25分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...

  3. 7-29 修理牧场 (25 分)

    7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L ​i ​​ 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...

  4. 7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)

    7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条很长的.能锯成N块的 ...

  5. 7-218 修理牧场 (25 分)

    7-218 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li​个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li​的总和 ...

  6. 7-5 修理牧场 (25 分)

    7-5 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L i的总和. ...

  7. 【两种方法】基础实验4-2.7 修理牧场 (25 分)

    立志用最少的代码做最高效的表达 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但 ...

  8. 7-2 修理牧场 (25 分)

    大一下半期数据结构 修理牧场 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L​i​​的总 ...

  9. 7-7 修理牧场 (25分)嗯嗯

    农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li​​ 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li​​ 的总和. 但是农夫自己没有锯子,请 ...

最新文章

  1. python中的元类_python中的元类
  2. sql语句技巧,不敢独享,特此呈上
  3. Tree前序反序列化
  4. BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
  5. MySQL中使用外键约束的注意事项
  6. sqli-lab——Writeup(38~over)堆叠等......
  7. M​y​E​c​l​i​p​s​e​下​反​编​译​插​件​安​装​使​用​方​法
  8. 用matlab实现假设性检验T检验(葡萄酒评价)
  9. java io怎么学_Java IO 初学者 怎么都弄不出来
  10. 功能测试-测试定义与原则
  11. crontab的使用记录
  12. 解决hdfs dfs -mkdir input报错`mkdir`:No such file or directory
  13. 项目管理工具一:职责清晰的6W1H原则
  14. 微信开发遇到的那些坑
  15. 再梳理一下seqtoseq,encoder-decoder,attention,transformer的概念
  16. springboot使用jdbc连接mysql数据库时测试连接错误
  17. Gitea配置文件说明
  18. CentOS7防火墙关闭
  19. TL-WR886N路由器+树莓派绑定IP地址
  20. 第 1 份工作,我只干了 2 周就被辞退了 | 十年系列

热门文章

  1. 编写一个java_Java入门篇(一)——如何编写一个简单的Java程序
  2. DateTime日期差
  3. MYSQL计算日期差和时间差的函数
  4. UPC-5594 Colorful Slimes(思维)
  5. SUCTF2019-hardCPP WP
  6. python子列表_关于python:创建子列表
  7. 了解如何使用 Mac 或 PC 同步音乐、影片(新系统不用iTunes)
  8. Latex: 调整文档的行距?
  9. [HDU]1205 吃糖果 [抽屉原理]
  10. C#验证身份证是否有效