BIT寒假练习-2013__1012:导弹防御问题

博客内容介绍了如何解决导弹防御问题,通过寻找最长不上升子序列确定最多能拦截的导弹数量。该问题转化为求最长上升子序列,利用动态规划(DP)策略,分别计算以每个元素为结尾的最长不上升和上升子序列的长度。
摘要由CSDN通过智能技术生成

经典DP。

最多一次可以拦截的导弹数,就是在数列中找到一个最长不上升子序列,需要多少防卫导弹就是求一个最长上升子序列。

up[i]表示以第i个为结尾的子序列中最长的不上升子序列的长度。up[i]=max{up[j] + 1}(h[j]>=h[i])。

down[i]表示以第i个为结尾的子序列中最长的上升子序列的长度。down[i]=max{down[j] + 1}(h[j]<h[i])。

一开始没有看出来需要多少防卫导弹就是求一个最长上升子序列,纠结了半天,看了别人的题解才明白的。有点水了,好歹以前还做过这题的,都忘了。。。

#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

int n,h[1100];
int up[1100],down[1100];

int main()
{
while (scanf("%d",&n) != EOF)
{
      up[0] = -1;
      down[0] = -1;
      for (int i = 1 ; i <= n ; i ++)
      {
          scanf("%d",&h[i]);
          up[i] = 1;
          down[i] = 1;
      }
      for (int i = 1 ; i <= n ; i ++)
      {
          for (int j = 1 ; j < i ; j ++)
          {
              if (h[j] >= h[i]) up[i] = up[i]>up[j]+1 ? up[i] : up[j]+1;
              if (h[j] < h[i]) down[i] = down[i]>down[j]+1 ? down[i] : down[j]+1;
          }
          up[0] = up[0]>up[i] ? up[0] : up[i];
          down[0] = down[0]>down[i] ? down[0] : down[i];
      }
      printf("%d %d\n",up[0],down[0]);
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的影城管理系统,源码+数据库+论文答辩+毕业论文+视频演示 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。 关键词:小徐影城管理系统;Spring Boot框架,MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值