有一段时间没有更新博客了。。就简单记录一套比较简单的题目的题解吧。。
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前面那个数是多少,然后左边递增右边递减往里面填数即可。