导弹拦截问题

匿名 (未验证) 提交于 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++]; 	while(cin.get() == ' ') 	{ 		cin >> d[n++]; 	} 	p[n-1]=1; 	dp(n-2,d,n-1); 	max=p[0]; 	for(i=1;i < n;i++) 	{ 		if(max < p[i]) 			max = p[i]; 	} 	for(i=0;i < n-1;i++) 	{ 		if(d[i] < d[i+1]) 		count++; 	} 	if(count == n-1) 	count++; 	cout << max << endl << count; 	return 0; }

文章来源: https://blog.csdn.net/qq_42418728/article/details/88201234
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!