用了一点贪心的思想,至于为什么贪心是正确的,可以证明,证明很简单,就不写了。
#include<iostream>
using namespace std;
const int maxn=1111111;
const int inf=0x7fffffff;
int a[maxn];
int n,num,temp,ti;
int dp[maxn];
void init()
{
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));
return ;
}
int dpstart()
{
num=1;
dp[1]=1;
for(int i=2;i<=n;i++)
{
temp=inf;
for(int j=i-1;j>=1;j--)
{
if(a[i]<=a[j] && dp[j]==1)
{
if(a[j]<temp)
{
temp=a[j];
ti=j;
}
}
}
if(temp==inf)
{
dp[i]=1;
num++;
}
else
{
dp[i]=1;
dp[ti]=0;
}
}
return num;
}
int main()
{
while(cin>>n)
{
init();
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cout<<dpstart()<<endl;
}
return 0;
}