导弹拦截问题 dp c++
//
// Created by snnnow on 2020/4/13.
//
//每一次拦截只能是降续的导弹
//如果该次不能拦截成功,则拦截次数需要加一
//求每次最大拦截量,以及需要的拦截次数
//
//单次拦截:最长不上升序列--dp
//拦截次数:(官方上叫它为"贪心")就是挨个比较逆序列嘛,要是出现比所有已知逆序列最小值都大的就加次数
//如果有多个一样的就是
//
#include <iostream>
#include <string.h>
using namespace std;
int main(){
int a[]={};//这个是用来存放输入的数的
int b[]={};//b[i]是指a[i]这个前面连着的最长的有几个
int c[]={};//..
int i=;
int maxall=;
int allway = ;//表示一共几套系统
while(cin>>a[i]) {
if (a[i] != ) {
// if (i == 1) {
// i++;
// continue;
// } else {
int max = ;
for (int j = ; j <= i-; j++) {//注意一下,j是前面的,基准数字i是刚输进去的才是后面的
if (a[j] >= a[i] && b[j] > max) {//有第二句条件的原因是:如果变化量a[j]有多个满足条件,就要找最大的一个了,因为b[i]是最长的
max = b[j]; }
b[i] = max + ;//max负责记录最大量,最后给了b[i];+1是因为算上b[i]就多了一个嘛
if (b[i] > maxall) {
maxall = b[i];//用来记录所有的最大值
} //接下来这一段是判断哪一套系统的,c[a]就是指第a套系统中的最小值 }
int basic = ; for (int k = ; k <= allway; ++k) {//每一套系统都来试试a[i]行不行(可能一套都不行,也可能一套行或多套行)
if (a[i] <= c[k]) {//需要跟每一套系统的最小值比较
if (basic == ) {//basic为零说明这是第一个满足条件的,那就直接归到第k组就行
basic = k;//还有就是先有的一套才有的多套,所以这个if大家都要进 }
else if (c[k] < c[basic]) {//如果有多种情况满足条件,那就找c小的,因为C大的可以满足的情况多
basic = k;
}
} }
if (basic == ) {//basic为0,说明没有已存在的系统,那就只能开新的了
allway++;
basic = allway;
}
c[basic] = a[i];//basic 是在为a[i]找个系统,c[basic]是a[i]存在的系统中最小的了(就是a[i])
i++;
} else break;
}
cout<< maxall+<<" "<<allway<<endl;
return ; }
刚刚debug代码,发现了几个问题
1.a,b都是从一开始的(没有影响),但是c是从0开始的
2.不上升允许相等的状态存在(>=)一开始漏等号,会很凉
3.注意不要重复定义变量..还有就是变量定义的位置也很重要呀!!!(比如一开始把allway放循环里了,很让人伤心的debug)
导弹拦截问题 dp c++的更多相关文章
- 洛谷 1020:导弹拦截(DP,LIS)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- 导弹拦截(dp复习)
题目描述:求最长下降子序列的长度 in: 71 7 3 5 9 4 8 out: 4 解释:1 3 4 8/1 3 5 8 长度为四 这让我想到了hdu上导弹拦截那道题,是求最长上升子序列长度 其转移 ...
- [P1020]导弹拦截 (贪心/DP/二分/单调队列)
一道很经典的题 这道题就是要求一个最长单调不升子序列和一个最长单调上升子序列. 先打了一个n2复杂度的 用DP #include<bits/stdc++.h> using namespac ...
- 导弹拦截问题(DP+贪心)
1. 拦截导弹(Noip1999) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度. ...
- 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)
传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...
- ALGO-13_蓝桥杯_算法训练_拦截导弹(贪心,DP)
问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- P1020 导弹拦截 dp 树状数组维护最长升序列
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- UESTC 2015dp专题 N 导弹拦截 dp
导弹拦截 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descrip ...
- 【BZOJ2044】三维导弹拦截 DP+(有上下界的)网络流
[BZOJ2044]三维导弹拦截 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指 ...
随机推荐
- Java 从入门到进阶之路(二十七)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map. Map 接口定义的集合又称查找表,用于存储所谓“Key-Value” ...
- 一.1搭建跨平台的统一python开发环境
搭建跨平台的统一python开发环境: 使用开发环境的好处: 可不用在服务器上直接修改源代码---写的代码首先得入版本库(放git或giitlab中),在本地写代码提交到git中.然后在服务器上git ...
- String 类的其他功能
12.01_常见对象(Scanner的概述和方法介绍)(掌握) A:Scanner的概述 B:Scanner的构造方法 Scanner(InputStream source) System.in C: ...
- 转载--gulp入门
关于gulp的入门文章,先转载了 http://markpop.github.io/2014/09/17/Gulp%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/
- 「疫期集训day12」阴雨
我们走进了泥泞的雨林----阿尔贡森林里艰难前进的士兵 今天考试一般,T1T2签到题没啥好说的,剩下三个小时全肛T3(我脑子有泡,前几天刚做了一道类似T4的难题,公式更难推),9:00->10: ...
- USACO07 MAR Face The Right Way G
疫情当下,美帝又开始倒牛奶了,这一幕似曾相识啊~~~ 这个题目非常的应景,又是美国佬的奶牛 [题目地址] [一句话题意] N头牛排成一列1<=N<=5000.每头牛或者向前或者向后. 为了 ...
- Mysql如何取当日的数据
下面的sql语句可以取出当日的数据 SELECT * FROM table WHERE 时间字段 BETWEEN DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00') AND ...
- CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞
CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞复现 漏洞介绍 F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理.应用程序安全管理.负载均衡等功能的应用交付平台. 近日, ...
- 技术干货丨通过wrap malloc定位C/C++的内存泄漏问题
摘要:用C/C++开发的程序执行效率很高,但却经常受到内存泄漏的困扰.本文提供一种通过wrap malloc查找memory leak的思路. 用C/C++开发的程序执行效率很高,但却经常受到内存泄漏 ...
- [HCTF 2018]admin
前言: 最近在BUUCTF刷题,参照师傅们wp后复现一下 0x01 拿到题目后进去如下界面 发现有登录和注册界面,相比是要登录后才能查看想要的信息. 查看页面源代码,看看有没有上面提示,界面如下 提示 ...