hrbeu 哈工程 Who Is In Front of Me

//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; }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值