• 最少拦截系统(线性dp)


    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 
    怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统. 

    Input

    输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔) 

    Output

    对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统. 

    Sample Input

    8 389 207 155 300 299 170 158 65

    Sample Output

    2

    代码:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    #define INF 999999
    
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    int dp[5005];
    int a[5005];
    int main()
    {
    	int n;
    	while(cin>>n)
    	{
    		for(int t=1;t<=n;t++)
    		{
    			scanf("%d",&a[t]);
    		}
    	    for(int t=1;t<=n;t++)
    	    {
    	    	dp[t]=1;
    		}
    		for(int t=1;t<=n;t++)
    		{
    			for(int j=1;j<=t-1;j++)
    			{
    				if(a[t]>=a[j])
    				dp[t]=max(dp[t],dp[j]+1);
    			}
    		}
    		int maxnn=-9999;
    		for(int t=1;t<=n;t++)
    		{
    			maxnn=max(dp[t],maxnn);
    		}
    		cout<<maxnn<<endl;
    	}
    	return 0;
    }
  • 相关阅读:
    [php]php设计模式 (总结)
    MySql常用命令总结
    mysql常用命令
    搜集几个API接口
    c语言 11-7
    c语言中转换字符串函数 atoi函数
    c语言中 strncmp函数, 函数原型和头文件。
    c语言中strcmp函数,函数原型和函数头文件
    c语言中strncat函数,函数原型以头文件
    c语言中strcat函数,函数原型和函数头文件
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781780.html
Copyright © 2020-2023  润新知