实在没办法了,才来问的
查看原帖
实在没办法了,才来问的
255540
Her_Lingxiao楼主2020/6/2 13:04

就是做了半天,然后还是10WA+10TLE,干得漂亮 来问问怎么错的


#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX = int(1e6) + 5;
int a[MAX];
int b[MAX];
int h[MAX];
int n;//记录系统个数
int m;
int x;//即将拦截导弹的系统编号
int i;
int main()
{
	while(cin >> a[++i])//输入环节
	{
		int maxx = 0;//初始化,求最大值时最大值需初始成最小的数(此处是0
		for(int j = 1; j <= i - 1; j++)//从1~i-1找最长的不上升子序列
		{
			if(a[j] >= a[i])//如果可以拦截的话
			{
				if(b[i] > maxx)//更新最大值
					maxx = b[i];
			}
		}
		b[i] = maxx + 1;//最长子序列数+1
		if(b[i] > m)//更新答案
			m = b[i];
 		x = 0;
		for(int k = 1; k <= n; k++)
		{
			if(h[k] >= a[i])
			{
				if(x == 0)
					x = k;
				if(h[k] < h[x])
					x = k;
			}
		}
		if(x == 0)
			x = ++n;
	}
	printf("%d\n%d", m, n);
	return 0;
}
2020/6/2 13:04
加载中...