[DP]TYVJ P1049 最长不下降子序列

来源:互联网 发布:mac如何修改磁盘名称 编辑:程序博客网 时间:2024/05/18 17:00

原题:http://www.tyvj.cn/Problem_Show.aspx?id=1049


类型:DP


时间:2014.3.8


源码:

#include<cstdio>#include<iostream>using namespace std;int main(){int n;scanf("%d",&n);int a[n+1],b[n+1];for(int i=1;i<=n;i++) { scanf("%d",&a[i]); b[i]=1; }for(int i=n-1;i>=1;i--){int l=0;for(int j=i+1;j<=n;j++){if(a[j]>a[i] && b[j]>l){l=b[j];}}if(l>0){b[i]=l+1;}}int max=0;for(int i=1;i<=n;i++){if(b[i]>max) { max=b[i]; }}printf("%d",max);system("pause");return 0;}

最后状态:AC


总结:想了半天也没做出来,问了MJ也没做出来,最后看的题解

主要思想是对于b[n],由于是最后一个,b[n]=1; 只后b[i]就从b[i+1]搜到b[n],如果搜到的数比b[i]大,那么以该数为起始的最长不下降子序列可以作为b[i]的后继,每次搜完找个最大的+1即可,找出max{b}即可

0 0
原创粉丝点击