题目链接:
此前有一道更简单的二维偏序问题:hdu1541(Stars)
分析:同样是偏序问题,使用树状数组可以降低复杂度到nlogn
代码1:n^2的dp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
int n=0,h[maxn],dp[maxn],fp[maxn];
int main()
{
while(~scanf("%d",&h[++n]));
n--;
/*
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&h[i]);
*/
for(int i=1;i<=n;i++) dp[i]=fp[i]=1;
for(int i=1;i<n;i++)
for(int j=n;j>=1+i;j--)
{
if(h[j]<=h[i]) dp[j]=max(dp[j],dp[i]+1);
else fp[j]=max(fp[j],fp[i]+1);
}
int ans1=0,ans2=0;
for(int i=1;i<=n;i++)
{