杭电OJ1789、南阳OJ236(贪心法)解题报告
杭电OJ1789http://acm.hdu.edu.cn/showproblem.php?pid=1789
南阳OJ236http://59.69.128.203/JudgeOnline/problem.php?pid=236
1、最简单的贪心法是只有一个东西需要考虑(如安排会场,只需要将 "时间" 进行排序),
即使需要考虑两个,也有一个明显的先后顺序(比如应先考虑开头时间,开头一样的,再找结束时间早的)
2、而稍难的问题如这两个题目的贪心法则是建立在两个处于平行地位的东西上进行的,(因为都需要同时考虑,如杭电OJ的时间与分数平等地位,南阳OJ的重量和长度地位平等)
这个时候就需要对其中一个排序,对另一个通过for循环的形式进行遍历选择。
如杭电OJ中由于既要考虑期限大小,又要考虑分数高低,并且显然二者的地位是平等的,这时就需要先对其中一个进行排序,然后通过一个for循环进行遍历选择
具体操作为:首先将分数按大小排序,然后利用双层for循环(外层构造情景,也就是过程,内层进行遍历找到最优解)找到每个步骤的最优解
再具体一点就是:分数按照大小排序之后,先利用一个外层for来营造情景(也就是过程,本题为日期(第%d天)),然后利用内层for通过按顺序遍历排好序的数组找到最优解
再如南阳OJ由于既要考虑木棒长度,又要考虑木棒的重量,并且二者的地位是相等的,这是也就需要先对其中一个进行排序,然后通过一个for循环进行遍历选择
具体操作是:首先将木棒长度排序,然后利用双层for循环(外层构造情景,也就是过程,内层进行遍历找到最优解)找到每个步骤的最优解
再具体一点就是:木棒按照长度排序之后,先利用一个外层for构造情景(也就是过程,本题为前一个木板的重量),然后利用内层for通过按顺序遍历排好序的数组找到最优解
概括一下就是先将其中一个变量 a 进行排序, 然后利用外层for与另一个变量b构造出过程,然后内层根据b 的最优进行遍历即可
(因为通过a的排序已经将化为最优,现在只需用循环找最优b即可)