原题地址:http://codeforces.com/problemset/problem/545/C
题意解析
给n棵树的在一维数轴上的坐标,以及它们的高度。现在要你砍倒这些树,砍倒的树不能重合、当然也不能覆盖另外的树原来的位置,现在求最大可以看到的树的数目
解题思路
网上有很多人说这是DP,然而我怎么看都不需要用到DP。首先题中数据是按照坐标从小到大给出的,那我们直接从左到右每棵树依次看,那么显然可以有以下几点
- 最左边那棵树一定可以向左倒,最右边那棵树一定可以向右倒
- 每棵树,能向左倒就向左倒。(向左倒了后就不会影响下一棵)
- 每棵树,能倒就倒(每棵树向哪个方向倒,或者倒不倒,只受影旁边两棵树的影响,那么这棵树倒不倒只会影响到右边一棵树,绝不会传递给后一棵的决策)
那么很显然,这是贪心……按照这个思路,我们甚至可以边读入数据边处理,具体见下面的代码:
AC代码
//CodeForces-545C Woodcutters
//AC 2016-04-14 15:02:50
//greedy tricky
#include <iostream>
#include <cstdio>
#include <algorithm>
#include &l