导弹拦截(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;
}

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

时间: 2024-11-04 09:37:08

导弹拦截(dp复习)的相关文章

【BZOJ2044】三维导弹拦截 DP+(有上下界的)网络流

[BZOJ2044]三维导弹拦截 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A国人民不会允许这样的事情发生,所以这个世界上还存在拦截导弹. 现在,你是一名A国负责导弹拦截的高级助理. B国的导弹有效的形成了三维立体打击,我们可以将这些导弹的位置抽象三维中间的点(大小忽略),为了简单起见,我们只考虑一个瞬时的状态,即他们静止的状态. 拦截导弹设

P1020 导弹拦截 /// DP Dilworth定理 LIS优化

题目大意: https://www.luogu.org/problemnew/show/P1020 Dliworth有两个互相对偶的定理:U的链划分使用的最少集合数,等于它的最大反链长度.(1)U的反链划分使用的最少集合数,等于它的最大链长度.(2) 更详细的讲解 #include <bits/stdc++.h> using namespace std; int a[100005]; int dp1[100005],dp2[100005]; int f1[100005],f2[100005];

[dp][uestc oj][最长上升子序列] LIS N - 导弹拦截

N - 导弹拦截 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都要高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹,同时,司令部想知道拦截下来的导

【dp】导弹拦截

拦截导弹 (missile.pas/c/cpp) 来源:NOIP1999(提高组) 第一题 [问题描述] 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最

木棍加工(dp,两个参数的导弹拦截问题)

题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的:     第一根棍子的准备时间为1分钟:     如果刚处理完长度为L,宽度为W的棍子,那么如果下一个棍子长度为Li,宽度为Wi,并且满足L>=Li,W>=Wi,这个棍子就不需要准备时间,否则需要1分钟的准备时间:     计算处理完n根棍子所需要的最短准备时间.比如,你有5根棍子,长度和宽度分别为(4, 9),(5, 2),(2, 1),

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

题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统. 输入输出格式 输入格式: 一行,若干个正整数最多100个. 输

P1020 导弹拦截 - 序列DP

传送门 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮 弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 输入导弹依次飞来的高度(雷达给出的高度数据是不大于50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统. 输入输出格式 输入格式: 一行,若干个整数(个数少于

code1044 导弹拦截

分析: 这套系统最多能拦截的导弹数 就是 导弹高度的最长不上升子序列(下降或相等) 如果要拦截所有导弹最少要配备多少套这种导弹拦截系统 就是 导弹高度的最长上升子序列 因此直接用dp求就可以了 a[i]为第i个导弹的高度 dp[i]为以i结尾的最长不上升子序列的长度 方程 dp[i] = max( dp[j] ) + 1  (j=i-1 to 1, a[i]<=a[j]) 最长上升子序列 只要把条件a[i]<=a[j] 改成 a[i]>a[j] 即可

noip提高组1999 导弹拦截

导弹拦截 背景 实中编程者联盟为了培养技术精湛的后备人才,必须从基础题开始训练. 描述 某国为了防御敌国的导弹袭击,研发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试验阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 格式 输入格式 输入数据只有一行,该行包含若干个数据,之间用半角逗号隔开,表示导弹依次飞来的高度(导弹最多有 20 枚,其高度为不大于 300