Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

给个简单证明吧

Posted by Snow_storm at 2011-03-16 02:56:48 on Problem 1065 and last updated at 2011-03-16 03:25:22
In Reply To:Re:谁能给个贪心的证明啊?? Posted by:my_echo at 2009-12-05 18:21:55
其实这题需要两次贪心

初始思路,
最长不降子序列或者floyd求最长路,floyd肯定超时,写nlogn的最长不降子序列也非常蛋疼

于是,
第一次贪心:其实并非每次都要求一个最长的序列,然后删除,只要选出的序列符合"极大"即可。这里的极大和函数的极值是一个概念。
例如,(1,4) (4,4) (5,3) (9,4) 其中最大(最长)的一个序列为 (1,4)->(4,4)->(9,4)
极大的序列 为 (5,3)->(9,4)
证明:很简单,因为所有的木头都需要被加工,并且与加工的先后顺序无关,那么该木头一定
需要在某个序列中,而我们每次选择的序列是极大的,故每次操作都没有遗漏可加入的木头,因此总的操作数是最少的。

第二次贪心:得到一个极大的序列,直接枚举的复杂度是O(n^3),显然超时。进一步思考

考虑任意的序列:对于任意的序列(a,b)->(c,d) 如果该序列是合法的,那么必然满足
a<=c 且 b<=d ,不等式相加可得 a+c<=b+d

上面的不等式提示我们,对于任意的合法序列,必然满足长度与重量之和 是不降的

因此,如果我们将长度作为第一关键字,重量做为第二关键字进行升序排序,那么从左到右,选取所有w不降的序列,则该序列必然是极大序列。

证明:1.序列是合法的,这个正确性显然。2.序列是极大的,因为我们在1的前提下,尽可能多的选取木头

于是我们得到了最终的算法:O(nlgn+n^2)

1.先按第一关键字排序,若第一关键字相等,则按第二关键字排序
2.找出w不降,且未被标记的所有木头,将之标记
3.直到所有的木棍都被标记,否则继续执行2

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator