2014年4月TOJ月赛解题报告

1005 水沟问题思路详解-by standard

分析一下我的思路。

1.首先思考某个位置能够储存水的条件——它的两端高度都要高于它。

2.如果将这个两端扩展到最左端和最右端,那么只要高度低于这两个端点中最小的那个高度的位置都可以储存水(重点是在于不受中间情况影响)。

举个例子就是:假设最左端高度为3,最右端高度为4,那么在中间所有高度小于3的位置都一定可以储存水,并不会受其他因素改动。

3.接下来就是根据上述所说的演变出动态过程。首先思考:两端如何向中间靠拢?

(1)选择两端中较高的一端向内移动判断。

举例:假设高度分布为3,1,5,1,4。则最左端高度为3,最右端高度为4,那么按上述思路,从右端向内靠近,在还没有探查到中间高度的情况无法判断第四个位置能储存的水量为3或是高于3,不可行。

(2)选择两端中较低的一端向内移动判断。

举例:假设高度分布为3,1,5,1,4。则最左端高度为3,最右端高度为4,根据上述思路,从左端向内靠近,判断第二个位置可储存水量必为2,(因为受到左端高度制约,且已知右端高度大于3,无法影响结果)。可行。

根据上述讨论,可以确定整个动态过程:从最左端与最右端开始向内靠拢,每次都选择两者中较低的一个端点方向向内靠拢,一共有两种情况:1.待查询的位置高度低于端点高度,则更新可储存的水量。2.待查询的位置高度高于端点高度,则更新端点高度。

重复进行上述过程直至所有点都查询完毕。

整个思路大致如上。中心思想为两端向内靠拢。注意到这一点就会很容易想通。

整个程序时间复杂度为O(n):若有更佳方法欢迎讨论。


为解题报告打分
暂时不评分

★★
★★★
★★★★
★★★★★
发表您的评论(若贴AC代码或发表禁止言论等违禁行为将被删除并扣除积分)

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.