这道题第一问我是用的贪心的思路,目前没有错。但是第二问应该是求最长不上升序列吧,程序求出的答案极其不稳定!!!
#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的帮助。