7-29 修理牧场 (25分)(PTA实验题)
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实验题)相关推荐
- python 7-33 修理牧场 (25 分) PTA
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但是农夫自己没有锯子,请人锯木的 ...
- 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)
基础实验4-2.7 修理牧场 (25分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 7-29 修理牧场 (25 分)
7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)
7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的 ...
- 7-218 修理牧场 (25 分)
7-218 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和 ...
- 7-5 修理牧场 (25 分)
7-5 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L i的总和. ...
- 【两种方法】基础实验4-2.7 修理牧场 (25 分)
立志用最少的代码做最高效的表达 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但 ...
- 7-2 修理牧场 (25 分)
大一下半期数据结构 修理牧场 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总 ...
- 7-7 修理牧场 (25分)嗯嗯
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li 的总和. 但是农夫自己没有锯子,请 ...
最新文章
- python中的元类_python中的元类
- sql语句技巧,不敢独享,特此呈上
- Tree前序反序列化
- BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
- MySQL中使用外键约束的注意事项
- sqli-lab——Writeup(38~over)堆叠等......
- M​y​E​c​l​i​p​s​e​下​反​编​译​插​件​安​装​使​用​方​法
- 用matlab实现假设性检验T检验(葡萄酒评价)
- java io怎么学_Java IO 初学者 怎么都弄不出来
- 功能测试-测试定义与原则
- crontab的使用记录
- 解决hdfs dfs -mkdir input报错`mkdir`:No such file or directory
- 项目管理工具一:职责清晰的6W1H原则
- 微信开发遇到的那些坑
- 再梳理一下seqtoseq,encoder-decoder,attention,transformer的概念
- springboot使用jdbc连接mysql数据库时测试连接错误
- Gitea配置文件说明
- CentOS7防火墙关闭
- TL-WR886N路由器+树莓派绑定IP地址
- 第 1 份工作,我只干了 2 周就被辞退了 | 十年系列