您的位置:首页 > 其它

hrbeu 哈工程 Who Is In Front of Me

2012-10-09 22:37 357 查看
//DP入门题状态转移方程很容易想到
//关键是构建pre数组,多少有点像KMP里面构建的next数组

#include <stdio.h>
#include <string.h>
#define MAX 50100
int a[MAX],pre[MAX],dp[MAX];
int n;
int main()
{
int i,j,T,max;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
pre[1]=0;  dp[1]=0;
scanf("%d",&a[1]);
max=0;
for(i=2; i<=n; i++)
{
scanf("%d",&a[i]);
if(a[i]<a[i-1])
{
pre[i]=i-1;
dp[i]=dp[i-1]+1;
}
else
{
for(j=pre[i-1]; j!=0 && a[i]>=a[j] ; j=pre[j]) ;
pre[i]=j;
if(!pre[i])  dp[i]=0;
else         dp[i]=dp[pre[i]]+1;
}
max=dp[i]>max?dp[i]:max;
}

//              for(i=1; i<=n; i++) printf("%d ",pre[i]); printf("\n");
//              for(i=1; i<=n; i++) printf("%d ",dp[i]);  printf("\n");
printf("%d\n",max);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐