Shanghai 2004 Preliminary

有一段时间没有更新博客了。。就简单记录一套比较简单的题目的题解吧。。

POJ2078~POJ2085

http://poj.org/searchproblem?field=source&key=Shanghai+2004+Preliminary


POJ2078

一个矩阵,可以将每一行随意转动,求每一列权值和最大值的最小值。

直接7^7搜索,要加最优性剪枝,不然会TLE。


POJ2079

平面内有n个点,选取其中3个点构成三角形,求其最大面积。

坐标范围不大,意味着凸包上的点数也不会很多,大致是sqrt(M)级别。

求出凸包后枚举一个三角形端点,枚举第二个点,然后第三个坐标凸包上的选择对于叉积的值来说有明显的单峰性,可以TwoPointers。


POJ2080

求2000-01-01的n天后是哪一天以及星期几……

模拟


POJ2081

求一个递推数列的第n项

直接模拟即可,用hash保存出现过的数字。

好像开个1e8的数组直接保存也没问题……


POJ2082

一堆宽为wi高为hi的砖彼此挨着躺在地上,求这些砖覆盖的最大矩形面积……

经典题目,有单调栈维护“右边第1个比hi小的位置”,左边一样处理。


POJ2083

递归模拟画一个X

G++会TLE..交C++却很快过


POJ2084

Catalan数


POJ2085

求逆序对数为m且字典序最小的一个n的排列

打个表就能发现规律:

 0 : 1 2 3 4 5 6 7
 1 : 1 2 3 4 5 7 6
 2 : 1 2 3 4 6 7 5
 3 : 1 2 3 4 7 6 5
 4 : 1 2 3 5 7 6 4
 5 : 1 2 3 6 7 5 4
 6 : 1 2 3 7 6 5 4
 7 : 1 2 4 7 6 5 3
 8 : 1 2 5 7 6 4 3
 9 : 1 2 6 7 5 4 3
10 : 1 2 7 6 5 4 3
11 : 1 3 7 6 5 4 2
12 : 1 4 7 6 5 3 2
13 : 1 5 7 6 4 3 2
14 : 1 6 7 5 4 3 2
15 : 1 7 6 5 4 3 2
16 : 2 7 6 5 4 3 1
17 : 3 7 6 5 4 2 1
18 : 4 7 6 5 3 2 1
19 : 5 7 6 4 3 2 1
20 : 6 7 5 4 3 2 1
21 : 7 6 5 4 3 2 1
关键是n的位置,还有n前面那个数是多少,然后左边递增右边递减往里面填数即可。


你可能感兴趣的:(Shanghai 2004 Preliminary)