求助(神奇的WA了)
查看原帖
求助(神奇的WA了)
538715
ajhuhe楼主2021/8/18 09:32

这道题第一问我是用的贪心的思路,目前没有错。但是第二问应该是求最长不上升序列吧,程序求出的答案极其不稳定!!!

#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int n,a[100001],b[100001],sum;
int read()
{
	int m;
	char c;
	c=getchar();
	if(c==EOF)
		return -1;
	while(c<'0'&&c>'9')
		c=getchar();
	while(c>='0'&&c<='9')
	{
		m=m*10+c-48;
		c=getchar();
	}
	return m;
}
int main()
{
	while(a[++n]=read(),a[n]>0)
	{
		if(a[n]>=a[n-1])
			sum++;
		b[n]=1;
	}
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<i;j++)
			if(a[i]<a[j]&&b[i]<b[j]+1)
				b[i]=b[j]+1;
		b[0]=max(b[0],b[i]);
	}
	cout<<b[0]<<endl<<sum;
	return 0;
}

上面的代码样例输出为3与2,后者是对的,前者错了。然后我想看一看是不是数据读入有问题加了两条语句:

#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int n,a[100001],b[100001],sum;
int read()
{
	int m;
	char c;
	c=getchar();
	if(c==EOF)
		return -1;
	while(c<'0'&&c>'9')
		c=getchar();
	while(c>='0'&&c<='9')
	{
		m=m*10+c-48;
		c=getchar();
	}
	return m;
}
int main()
{
	while(a[++n]=read(),a[n]>0)
	{
		cout<<a[n]<<" ";
		if(a[n]>=a[n-1])
			sum++;
		b[n]=1;
	}
	cout<<"\b\n";
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<i;j++)
			if(a[i]<a[j]&&b[i]<b[j]+1)
				b[i]=b[j]+1;
		b[0]=max(b[0],b[i]);
	}
	cout<<b[0]<<endl<<sum;
	return 0;
}

然后我发现读入没问题,但是输出居然又变了!!! 程序输出了7与2!!!我当场崩溃了,所以来此处求求dalao的帮助。

2021/8/18 09:32
加载中...