导弹

HDU 1257 最少拦截系统

匿名 (未验证) 提交于 2019-12-03 00:23:01
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 解题思路:刚开始没读懂题,还以为直接排序了事,后来发现不能用排序。仔细读题之后发现题目样例是这个意思:8(导弹个数) 389 207 155(第一个系统)300 299 170 158 65(第二个系统),因为300>155,所以需要第二个系统。要注意已经设置的系统也可以用来拦截导弹,故而每一次都从头开始判断导弹高度是否小于系统可拦截高度。 ps:wa了几次,在discuss中借鉴了两组测试数据,分享一下。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int high[1010]; int stay[1010]; int main() { int n; while(~scanf("%d",&n)) { int j=0; for(int i=0;i<n;i++) { scanf("%d",&high[i]); if(i==0) stay[j]=high[i]; else { int sign=0; for(int k=0;k<=j;k++) { if(stay[k]>=high[i]) { sign=1; stay[k]

HDU 1257 最少拦截系统

匿名 (未验证) 提交于 2019-12-03 00:22:01
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 解题思路:刚开始没读懂题,还以为直接排序了事,后来发现不能用排序。仔细读题之后发现题目样例是这个意思:8(导弹个数) 389 207 155(第一个系统)300 299 170 158 65(第二个系统),因为300>155,所以需要第二个系统。要注意已经设置的系统也可以用来拦截导弹,故而每一次都从头开始判断导弹高度是否小于系统可拦截高度。 ps:wa了几次,在discuss中借鉴了两组测试数据,分享一下。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int high[1010]; int stay[1010]; int main() { int n; while(~scanf("%d",&n)) { int j=0; for(int i=0;i<n;i++) { scanf("%d",&high[i]); if(i==0) stay[j]=high[i]; else { int sign=0; for(int k=0;k<=j;k++) { if(stay[k]>=high[i]) { sign=1; stay[k]

P1020 导弹拦截(LIS)

匿名 (未验证) 提交于 2019-12-02 23:40:02
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是 ≤50000 \le 50000 ≤ 5 0 0 0 0的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入输出格式 输入格式: 11 1行,若干个整数(个数 ≤100000 \le 100000 ≤ 1 0 0 0 0 0) 输出格式: 22 2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入输出样例 输入样例#1: 复制 389 207 155 300 299 170 158 65 输出样例#1: 复制 6 2 题解: 这道题之前的数据是n方的复杂度都可以过,但是在洛谷上面要nlogn的复杂度才可以,这里先讲第一种 第一问: 就是用平常的的最长上升子序列的模板 1 for(int i=n; i>=1; --i) 2 { 3 dp[i]=1; 4 for(int j=n; j>i; --j) 5 { 6 if(v[j]<=v[i

导弹拦截问题

匿名 (未验证) 提交于 2019-12-02 23:36:01
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数) 输出这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 6 2 导弹的高度<=30000,导弹个数<=20 #include <iostream> #define MAXSIZE 100 int p[MAXSIZE];//表示以下标i为结束的序列的情况 using namespace std; /* 1.就是利用p[i]=max(p[i+1],p[i+1]+a[i]),来求解最多拦截数 2.对于导弹系统就可以通过简单的 逆序数 来求解,线性代数里的问题 */ int dp(int begin,int a[],int end)//就是一个寻找最长递减子序列问题 { int i; int max=-1; for(i=end;i >= begin+1;i--) { if(a[i] <= a[begin] && p[i] > max) { max=p[i]; } } if(max == -1) p[begin]=1; else p[begin]=max+1; if(begin > 0) dp(begin -1,a,end); return 0; } int main() { int d[MAXSIZE]; int n=0,max; int i,j,count=0; cin >> d[n++

csp-s模拟75 导弹袭击

大憨熊 提交于 2019-12-01 12:00:02
题面 题解   想了想,这道题还是需要大概写一下题解的。   一开始比较显然的推柿子,可以得到 $\frac{(b_i-b_j)*a_i*a_j}{(a_j-a_i)*b_i*b_j}<=\frac{A}{B}$ 的形式,然后暴力$n^2$$Check$就行,这样就有75分了。(加一个很显然的剪枝)   然后正解。   我们发现上面那个$/frac{a_i}{b_i}$可以预处理出来,然后剩下了 $\frac{b_i-b_j}{a_j-a_i}$ ,我们好好看看这个柿子。                       $\frac{b_i-b_j}{a_j-a_i}$   它很像斜率?? 来源: https://www.cnblogs.com/LH-Xuanluo/p/11684567.html

计蒜客 防御导弹

天大地大妈咪最大 提交于 2019-11-30 01:11:44
# include <iostream> # include <cstdio> # include <iomanip> # include <string> # include <cstdlib> # include <cstring> # include <queue> # include <set> # include <vector> # include <map> # include <algorithm> # include <cmath> # include <stack> # define INF 0x3f3f3f3f # define LINF 0x3f3f3f3f3f3f3f3f # define ll long long # define ull unsigned long long # define uint unsigned int # define l(x) (x<<1) # define r(x) (x<<1|1) # define ms(a,b) memset(a,b,sizeof(a)) using namespace std ; int n , demo [ 2222 ] ; int dp [ 2222 ] , temp ; int main ( ) { scanf ( "%d" , & n ) ; for ( int i = 0 ; i < n

飞机编队形状

房东的猫 提交于 2019-11-29 16:14:35
1。 http://club.china.com/data/thread/1013/2721/04/96/2_1.html 写在最前:空战的基本原则 /来自中华网社区 club.china.com/ 编队进攻性空战基本原则 /来自中华网社区 club.china.com/ (1)在兵力上要处于数量优势,同时编成利于攻击的队形。 (2)空战中尽量攻击敌长机,并分割敌僚机,使之丧失战斗力。 (3)长机要主动攻击敌机,僚机要时刻观察敌长、僚机行动,掩护长机行动。如条件具备,应主动攻击敌机,并及时报告长机。 (4)长机出现弹药耗尽、负伤、机械设备故障等情况时,僚机应主动承担空中指挥任务。 (5)退出战斗时,编队应向战区的己方一侧、有地面防空火力掩护地区退出。剩余油料较多、位置有利的飞机,应积极掩护其它飞机先行退出战斗。 编队防御性空战基本原则 (1)当双机编队被敌机追踪时,应根据敌机的位置和距离,采取向外上下分开的机动动作,迫使敌顾此失彼。 (2)编队其中一架被跟踪时,其它飞机应全力实施火力掩护,努力使敌机放弃攻击。 (3)尽量用一架(双)飞机引诱敌机,其余飞机对敌攻击;防御的双(单)机向敌机转弯,诱使敌机跟随,另一对己机寻找机会攻敌。 (4)当敌机数量明显多于自己编队,或编队失去战斗力的飞机较多时,应主动退出战斗。 单机进攻性空战基本原则 (1

任务

走远了吗. 提交于 2019-11-29 06:16:11
☆A掉 导弹拦截 并写题解 来源: https://blog.csdn.net/weixin_45485187/article/details/100537211

HDU 1024 拦截导弹

北慕城南 提交于 2019-11-28 03:24:31
dp【i】表示为了拦截第i枚导弹最少需要多少个系统 状态转移方程 #include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <string> #include <map> #include <iomanip> #include <algorithm> #include <queue> #include <stack> #include <set> #include <vector> //const int maxn = 1e5+5; #define ll long long ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} ll lcm(ll a,ll b){return a/gcd(a,b)*b;} #define MAX INT_MAX #define FOR(i,a,b) for( int i = a;i <= b;++i) #define bug cout<<"--------------"<<endl using namespace std; int dp[31000],a[31000]; int main() { int n; while(cin>>n) { FOR(i,1,n) cin>>a[i]; int maxx = 0;

P1020 导弹拦截

倖福魔咒の 提交于 2019-11-28 00:46:57
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的 第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度 。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是≤50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入格式 1行,若干个整数(个数≤100000) 输出格式 2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 解决问题 在luogu上这道题被加强过了,分为两问. 第一问 显然,对于一套设备来说,它能防御的是一个不上升序列,也就是说,要求出一套设备最多能拦截多少导弹,只要在导弹序列中求出最长不上升子序列的长度就可以了.值得注意的一点是,数据范围不允许我们用n2做法求子序列,因此要采用二分查找的方式以nlogn的时间复杂度求解. 第二问 这个问题可以在脑内想象一下. 现在有一列导弹飞来,高度有高有低.为了拦截导弹,第一颗导弹必须由第一套设备拦截下来,但是从此以后它就不能拦住比这一颗低的导弹了.如果之后有一颗比当前能拦截的高度还要高的导弹飞来,就只能启用一套新的设备来拦截它了