导弹拦截问题 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国的指 ...
随机推荐
- python数据类型的72变
输入数据的类型 input函数接收的数据默认为字符串类型 转换函数 通过转换函数实现接收其他类型的数据 1.接收整数:字符串→整型数据: int("整数格式的字符串") 2.接收小 ...
- python_Linux系统的常用命令(三)
用户权限常用命令 1.用户和权限 r--读--4, w--写--2, x--执行--1 chmod 可以修改用户/组对文件/目录的权限 格式:chmod +/-rwx 文件名/目录名 su -用户:切 ...
- 痞子衡嵌入式:轻松为i.MXRT设计更新Segger J-Link Flash下载算法文件
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是为i.MXRT设计更新Segger J-Link Flash下载算法文件. 想要在Flash中调试,基本是离不开Flash下载算法的,毕 ...
- LeetCode题解【题2】:两数相加
原题链接:https://leetcode-cn.com/problems/add-two-numbers/ 查看请另起链接打开. 解题思路执行用时 :2 ms, 在所有 Java 提交中击败了99. ...
- 「疫期集训day6」雨林
是的,他们击退了我们,那又怎样,他们饥肠辘辘,弹尽粮绝...----阿尔贡森林中的士兵 今天考试一般,感觉难度比第一次考试要大的多,T2板子整合(元宵节原题,然而那次考试我都没参加),T1搜索,T3有 ...
- 「疫期集训day2」高地
硝烟从凡尔登高地的东方升起...我只知道这里会发生世界上前所未有的一次战役------凡尔登的法军士兵 今天运气挺好,早自习刚复习完数论和二分图,考试时又复习了状压和Tarjan 于是乎成绩惨不忍睹 ...
- scrapy框架携带cookie访问淘宝购物车
我们知道,有的网页必须要登录才能访问其内容.scrapy登录的实现一般就三种方式. 1.在第一次请求中直接携带用户名和密码. 2.必须要访问一次目标地址,服务器返回一些参数,例如验证码,一些特定的加密 ...
- 12个Visual Studio调试效率技巧
在这篇文章中,我们假定读者了解VS基本的调试知识,如: F5 开始使用调试器运行程序 F9 在当前行设置断点 F10 运行到下一个断点处 F5 从被调试的已停止程序恢复执行 F11 步进到函数内(如果 ...
- [JAVA]解决不同浏览器下载附件的中文名乱码问题
附件下载时,遇到中文附件名的兼容性问题,firefox.chrome.ie三个派系不兼容,通过分析整理,总结出处理该问题的办法,记录如下: 1.文件名编码 服务器默认使用的是ISO8859-1,而我们 ...
- java 数据结构(七):Collection接口
1.单列集合框架结构|----Collection接口:单列集合,用来存储一个一个的对象* |----List接口:存储序的.可重复的数据. -->“动态”数组* |----ArrayList. ...