集训

集训第六天

个人感想:今天陈老板讲了二分搜索树、平衡二叉树、二堆根、叶子节点、还有哈希表以及两种解决办法 开放定址法 和 拉链法。我觉得今天要自己慢慢学习的知识太多了,感觉听懂了一半左右剩下的还要自己慢慢理解通过题再多学几遍,因为前面的知识还并没有实现代码那么熟悉或者还没能实现,所以下午的学习主要还是学之前的深搜和广搜,今天发现自己的缺点并不仅仅是不够努力,还有就是容易分散注意力,下午的学习感觉有了新的发现,在我学习一个算法时,我要先看视频看看它的操作示范与思路,觉得可以听一会在本地编译上想一想实现代码的根基要什么。像广搜,我要有一个数组标记过我走过的路等。我觉得比一直听效果会好很多,今天的算法感觉会比之前的难很多,或许我感觉陈老板讲课问题之间来回跳会让人很迷,需要反应一段时间(如果你很聪明,当我没说),为什么没有王正学长讲课时我们给予的反馈多呢?因为我感觉我们在思考反应的时间很长,陈老板给我们反应的时间没有太多,可能今天讲的知识有点多吧,反正整个听下来头有点疼,哈哈。但是我猜陈老板的备课一定会准备的非常好!我觉得陈老板就是神,可能会带有自己的思想看问题吧,总有一种感觉为什么陈老板什么都会。今天个人总结就这么多吧!
附加今天做的题目虽然没有A,但我觉得这个题不一定用树。

D - 聪明的木匠

一位老木匠需要将一根长的木棒切成N段。每段的长度分别为L1,L2,…,LN(1 <= L1,L2,…,LN <= 1000,且均为整数)个长度单位。我们认为切割时仅在整数点处切且没有木材损失。
木匠发现,每一次切割花费的体力与该木棒的长度成正比,不妨设切割长度为1的木棒花费1单位体力。例如:若N=3,L1 = 3,L2 = 4,L3 = 5,则木棒原长为12,木匠可以有多种切法,如:先将12切成3+9.,花费12体力,再将9切成4+5,花费9体力,一共花费21体力;还可以先将12切成4+8,花费12体力,再将8切成3+5,花费8体力,一共花费20体力。显然,后者比前者更省体力。
那么,木匠至少要花费多少体力才能完成切割任务呢?
Input 第1行:1个整数N(2 <= N <= 50000) 第2 - N + 1行:每行1个整数Li(1 <= Li <= 1000)。
Output
输出最小的体力消耗。
Sample Input
3
3
4
5
Sample Output
19

#include<stdio.h>
int c[1001];
void fun(int c[],int b,int a){
if(b<a){
int i=b,j=a;
int t=c[b];
while(i<j){
	while(i<j&&c[j]>=t)
          j--;
        if(i<j)
        c[i++]=c[j];
     while(i<j&&c[i]<t)
	      i++;
		if(i<j)
		c[j--]=c[i];     
}       c[i]=t;
      fun(c,b,i-1);      
      fun(c,i+1,a);
}
}
int main(){
	int a,i;
	int sum=0;
	int sun=0;
	int j[1001];
	while(scanf("%d",&a)!=EOF){
		if(a>=2&&a<=50000){	
	for(i=0;i<a;i++){
		scanf("%d",&c[i]);
		j[i]=c[i];
		sun+=j[i];	
	}fun(c,0,a-1);
	for(i=0;i<a-1;i++)
	sum+=c[i];
	printf("%d ",sum+sun);}
}		
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值