算法复习——哈希表+折半搜索(poj2549)

搬讲义~搬讲义~

折半搜索感觉每次都是打暴力时用的啊2333,主要是用于降次··当复杂度为指数级别时用折半可以减少大量复杂度··其实专门考折半的例题并不多···一般都是中途的一个小优化···

然后折半搜索常常与哈希表一起使用··尤其是遇到方程类的问题时···

哈希表就不说了吧···毕竟比较简单···不懂得看下面题的代码就行了,一道折半与哈希表联合运用的经典方程模型题···

Description

Given S, a set of integers, find the largest d such that a + b + c = d where a, b, c, and d are distinct elements of S.

Input

Several S, each consisting of a line containing an integer 1 <= n <= 1000 indicating the number of elements in S, followed by the elements of S, one per line. Each element of S is a distinct integer between -536870912 and +536870911 inclusive. The last line of input contains 0.

Output

For each S, a single line containing d, or a single line containing "no solution".

Sample Input

5
2 
3 
5 
7 
12
5
2 
16 
64 
256 
1024
0

Sample Output

12
no solution

由a+b+c=d自然而然地转成a+b=d-c,然后将所有a+b储存在哈希表里,之后按d从大到小用d-c查找即可,第一个查找到的就是最大答案··

另外注意多储存一个下标,因为abcd不能为同一元素

posted @ 2017-09-22 12:58  AseanA  阅读(258)  评论(0编辑  收藏  举报