shu_1243 防御导弹

来源:互联网 发布:郑州师范学院网络教育 编辑:程序博客网 时间:2024/05/16 14:33

http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=6   


分析: 最长单调子序列(非递增)。

 

            dp方程: dp[i]= max(dp[j]) +1,   j<i && dp[j]>=dp[i]  && a[i]<=a[j] (即满足单调条件)

            dp[i] 在第i个位置的最长单调子序列,因此初始都为1.


代码:

          

#include <iostream>#include <string>#include <stdio.h>#include <sstream>using namespace std; int a[24];int dp[24];int main(){   // freopen("in.txt","r",stdin);     int n=0;    string s;    getline(cin,s);    stringstream ss;    ss.clear();    ss<<s;    while(1){       ss>>a[n++];       if(ss.fail()) break;    }    n--;    fill(dp,dp+n,1);    for(int i=1;i<n;i++){        for(int j=0;j<i;j++){            if(a[i]<=a[j] && dp[i]<=dp[j])                dp[i]=dp[j]+1;        }    }    int mmax=0;    for(int i=0;i<n;i++)        if(mmax<dp[i]) mmax=dp[i];    printf("%d\n",mmax);    return 0;}   


0 0
原创粉丝点击