AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入输出格式
输入格式:
一行,若干个正整数最多100个。
输出格式:
2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入输出样例
389 207 155 300 299 170 158 65
6
2 思路:
LIS+模拟=不难就是恶心
来,上代码:
#include<cstdio>
#include<algorithm> using namespace std; int ai[],f[],ans_max,ans_num=,n,cur_2; int main()
{
//scanf("%d",&n);
//for(int i=1;i<=n;i++) scanf("%d",&ai[i]),f[i]=1;
n=;
while(scanf("%d",&cur_2)==)
{
n++;
f[n]=;
ai[n]=cur_2;
}
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
if(ai[i]<=ai[j])
{
f[i]=max(f[j]+,f[i]);
}
}
}
for(int i=;i<=n;i++) ans_max=max(ans_max,f[i]);
printf("%d\n",ans_max);
for(int i=;i<=n;i++)
{
if(f[i]!=ans_max) continue;
int cur_1=ans_max;
int now=ai[i];
ai[i]=;
cur_1--;
for(int j=i-;j>;j--)
{
if(cur_1==) break;
if(cur_1==f[j]&&ai[j]>=now) now=ai[j],ai[j]=,cur_1--;
}
break;
}
for(int i=;i<=n;i++)
{
if(ai[i-]==)
{
for(int j=i-;j>;j--) if(ai[j]==) swap(ai[j],ai[j+]);
}
}
int before=n;
n-=ans_max;
while(n!=)
{
ans_num++;
for(int i=;i<=n;i++) f[i]=;
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
if(ai[i]<=ai[j]) f[i]=max(f[j]+,f[i]);
}
}
ans_max=;
for(int i=;i<=n;i++) ans_max=max(ans_max,f[i]);
for(int i=;i<=n;i++)
{
if(f[i]!=ans_max) continue;
int cur_1=ans_max;
int now=ai[i];
ai[i]=;
cur_1--;
for(int j=i-;j>=;j--)
{
if(cur_1==) break;
if(cur_1==f[j]&&ai[j]>=now) now=ai[j],ai[j]=,cur_1--;
}
break;
}
for(int i=;i<=n;i++)
{
if(ai[i-]==)
{
for(int j=i-;j>;j--) if(ai[j]==) swap(ai[j],ai[j+]);
}
}
n-=ans_max;
}
ans_num+=n;
printf("%d\n",ans_num);
return ;
}
AC日记——导弹拦截 洛谷 P1020 (dp+模拟)的更多相关文章
- AC日记——过河卒 洛谷 1002
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
- AC日记——寻找道路 洛谷 P2296
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- AC日记——铺地毯 洛谷 P1003(水水水水水~)
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- AC日记——围栏木桩 洛谷 P2362
围栏木桩 思路: DP: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 2001 int n,m,ai[ma ...
- AC日记——Power收集 洛谷 P3800
Power收集 思路: 单调队列优化dp: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 4005 stru ...
- AC日记——[SDOI2011]消耗战 洛谷 P2495
[SDOI2011]消耗战 思路: 建虚树走树形dp: 代码: #include <bits/stdc++.h> using namespace std; #define INF 1e17 ...
- AC日记——[SDOI2017]相关分析 洛谷 P3707
[SDOI2017]相关分析 思路: 裸线段树: (玄学ac): 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- AC日记——换教室 洛谷 P1850
题目描述 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课 ...
- AC日记——合唱队形 洛谷 P1901
题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2, ...
随机推荐
- phpcms—— 内容中的附件调用和添加远程地址的调用
phpcms中几个地址调用的方法 1,CSS路径有{CSS_PATH}2,图片路径有{IMG_PATH}3,JS路径有{JS_PATH} 4,那么附件的路径如何调用,使用下面的方式可以得到附件的路径前 ...
- .NET(Core)应用程序模型及未来
- 用css伪类实现提示框效果
题目要求用css实现下图效果: 很明显难点就在那个多出去的三角形上,下面代码是用一个div来实现的,用到了伪类 : befor和 : after,使用这两个伪类活生生的在div之前和之后多出了&quo ...
- SQL 语句日期用法及函数
SQL 语句日期用法及函数 --DAY().MONTH().YEAR()——返回指定日期的天数.月数.年数:select day(cl_s_time) as '日' from class --返回天 ...
- R语言学习笔记:简单的回归分析
fitbit <- read.csv("fitbit.csv") date cal step dist floor sit inactive walk run2 ...
- 利用在线工具自动化生成findviewById
我们在编码的时候经常会用到findviewById,不厌其烦,我之前介绍过一个很取巧的方法,挺好用的,这里再贴一下: public class KaleBaseActivity extends Act ...
- Apple Pay(转)
Apple Pay 是在 iOS 8 中第一次被介绍,它可以为你的应用中的实体商品和服务,提供简单.安全.私密的支付方式.它使得用户支付起来非常简便,只需按一下指纹就可以授权进行交易. Apple P ...
- response实现验证码图片
package com.zhangbz.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2 ...
- mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?
最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQU ...
- 读书笔记——Windows核心编程(13)Windows内存体系结构
对于32位进程(0x0000 0000~0xFFFF FFFF),有4GB的地址空间. 每个进程都有自己专有的地址空间,当进程的各个线程运行时,它们只能访问属于该进程的内存. 这4GB其实是虚拟地址空 ...