导弹拦截问题 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国的指 ...
随机推荐
- HDU3686 Traffic Real Time Query【缩点+lca】
题目 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, t ...
- 同一WpfApplication下简单的页面转换
别人写的很不错的Dome...分享学习下 源文件地址 : http://pan.baidu.com/share/link?shareid=1698564707&uk=3912660076
- 主流App自动化测试框架对比
1.主流App自动化测试框架对比 2.Appium自动化测试框架 官方网址:http://appium.io/ 跨架构:支持原生.混合以及web移动应用 跨平台:Android & I ...
- 聊聊Java
聊聊Java 笔记源于 视频教程Bilibili:狂神说Java 关注公众号:狂神说 能干嘛? 热度 TIOBE 狂神计划 三高:高可用.高性能.高并发 全球几千万的程序员都会Java,真正精通的不到 ...
- CSS3 实现复杂的背景图案
灵活的背景定位 实现效果: 将背景图定位到距离容器底边 10px 且距离右边 20px 的位置. background-position 方案 代码: <div>海盗密码</div& ...
- 数据可视化之分析篇(九)PowerBI数据分析实践第三弹 | 趋势分析法
https://zhuanlan.zhihu.com/p/133484654 以财务报表分析为例,介绍通用的分析方法论,整体架构如下图所示: (点击查看大图) 我会围绕这五种不同的方法论,逐步阐述他们 ...
- linux专题(九):磁盘管理
http://dwz.date/UDf 概述 Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用命令为 df.du. df :列出文件系统的整体磁盘使用量 du:检查磁盘空间 ...
- 06-Python元组,列表,字典,集合数据结构
一.简介 数据结构是我们用来处理一些数据的结构,用来存储一系列的相关数据. 在python中,有列表,元组,字典和集合四种内建的数据结构. 二.列表 用于存储任意数目.任意类型的数据集合.列表是内置可 ...
- OSCP Learning Notes - Post Exploitation(4)
Pivoting 1. Edit the virtual network settings of the Vmware. 2. Set the Network Adapter(s) of Kali L ...
- 紧急处理RAC环境有一个监听down 的情况
初步处理 1. grid 登录查看是监听是否down掉 srvctl status listener -n node1 或者oracle登录 lsnrctl status 查看 如果掉了 grid 用 ...