CEOI2004 锯木厂选址

编号山脚的树是1

w[i] 表示从1号到i号节点的树的总质量。

d[i] 表示第i棵树距离山脚的锯木厂的距离。

g[i] 表示从in棵树都运到i地的锯木厂所用的费用。

h[i] 表示从1i棵树都运到山底锯木厂所用的费用。

f[i] 表示中间的锯木厂建设在i处所用过的最小费用。

很容易写出朴素方程  f[i] = h[i-1] + g[j] + h[j-1] - h[i] - (w[j-1] - w[i])*d[i]

进行一下化简变换。

令t[i]=g[x]+h[x-1]

得到(t[x]-t[y])/(w[x-1]-w[y-1])>d[i]

注意当前你的i是倒着循环的,所以凸包要反着画,斜率之间的关系也因此而发生改变。

 

View Code
 1 program wood(input,output);
 2 var
 3     h     :array[0..25000] of int64;
 4     f,g   :array[0..25000] of int64;
 5     w     :array[0..25000] of int64;
 6     d     :array[0..25000] of int64;
 7     q      :array[0..25000] of longint;
 8     n        :longint;
 9     answer:int64;
10 procedure init;
11 var
12     i:longint;
13 begin
14     readln(n);
15     for i:=n downto 1 do
16         readln(w[i],d[i]);
17 end;{ init }
18 procedure change();
19 var
20     i:longint;
21 begin
22     for i:=1 to n do
23     begin
24         w[i]:=w[i-1]+w[i];
25         d[i]:=d[i-1]+d[i];
26         h[i]:=h[i-1]+(w[i]-w[i-1])*d[i];
27     end;
28     for i:=n downto 1 do
29         g[i]:=g[i+1]+(w[n]-w[i])*(d[i+1]-d[i]);
30 end;{ change }
31 function K(x,y:longint):double;
32 begin
33     exit((g[x]+h[x-1]-g[y]-h[y-1])/(w[x-1]-w[y-1]));
34 end;{ K }
35 procedure main;
36 var
37     i         :longint;
38     head,tail:longint;
39     bestK     :double;
40 begin
41     head:=1;
42     tail:=1;
43     q[1]:=n;
44     f[n]:=0;
45     answer:=maxlongint;
46     for i:=n-1 downto 1 do
47     begin
48         bestK:=d[i];
49         while (tail-head+1>=2)and(k(q[head+1],q[head])>=bestk) do
50             inc(head);
51         f[i]:=h[i-1]+g[q[head]]+h[q[head]-1]-h[i]-d[i]*(w[q[head]-1]-w[i]);
52         while (tail-head+1>=2)and(k(q[tail],q[tail-1])<k(i,q[tail])) do
53             dec(tail);
54         inc(tail);
55         q[tail]:=i;
56         if f[i]<answer then
57             answer:=f[i];
58     end;
59 end;{ main }
60 procedure print;
61 begin
62     writeln(answer);
63 end;{ print }
64 begin
65     assign(input,'wood.in');reset(input);
66     assign(output,'wood.out');rewrite(output);
67     init;
68     change;
69     main;
70     print;
71     close(input);
72     close(output);
73 end.

 

 

 

转载于:https://www.cnblogs.com/neverforget/archive/2012/04/19/2456527.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值