导弹拦截(dp复习)

Posted iloveysm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导弹拦截(dp复习)相关的知识,希望对你有一定的参考价值。

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

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复习)的主要内容,如果未能解决你的问题,请参考以下文章

dp导弹拦截

P1020 导弹拦截 - 序列DP

BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治

AC日记——导弹拦截 洛谷 P1020 (dp+模拟)

nyoj814_又见拦截导弹_DP

code1044 导弹拦截