码迷,mamicode.com
首页 > 其他好文 > 详细

导弹拦截(dp复习)

时间:2020-02-02 20:09:27      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:复习   导弹拦截   iostream   main   解释   pac   ems   cstring   stream   

题目描述:求最长下降子序列的长度

in:

7
1 7 3 5 9 4 8

out:

4

解释:1 3 4 8/1 3 5 8

长度为四

这让我想到了hdu上导弹拦截那道题,是求最长上升子序列长度

其转移方程为:

 dp[i]=max(dp[i],dp[j]+1);

如果a[j]<a[i],那么dp[i]就应该取dp[i]和dp[j]+1的最大值,由于是正序,j<i保证了dp[j]已经是j时的最优解

#include <iostream>
#include<cstring>
using namespace std;
int dp[10000],n;
int a[10000];
int dliworth(int n)
{
    int total=0;
    for(int i=0;i<n;i++)
    {
        dp[i]=1;
        for(int j=0;j<i;j++)
            if(a[j]<a[i])
            dp[i]=max(dp[i],dp[j]+1);
        total=max(total,dp[i]);
    }
    return total;
}
int main()
{
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
            cin>>a[i];
        cout<<dliworth(n)<<endl;
        memset(a,0,sizeof(a));
        memset(dp,0,sizeof(dp));
    }
    return 0;
}

 

导弹拦截(dp复习)

标签:复习   导弹拦截   iostream   main   解释   pac   ems   cstring   stream   

原文地址:https://www.cnblogs.com/iloveysm/p/12253066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!