首先按照第一关键字高度倒叙,第二关键字顺序的顺序拍下序
第一问O(n) dp一下
考虑一下第i个山能放在哪些山的后面,对于比第i个山高的,只能放在前关键字个的后面,但排在他的前面的和他一样高的的后面都可以放,因为他的关键字比已放的大
第二问大概就不能O(n)了...
我们强制让一样高的关键字从小到大排列。如果\(d[i]\)表示当前一个放在第 i个比他们高的后面,可以从\(i\in[0,i-1]\)转移过来
#include#include #include #include using namespace std;const int P = 2011;const int M = 1101;int res=1,n,m,k,sum,f[M],d[M];struct vv{ int x,y;}a[M];bool cmp(vv a,vv b) { return a.x!=b.x ? a.x>b.x: a.y