1:北大ACM2553题,求一个数组的最长单调递增序列。
代码:
#include<stdio.h>
void main()
{
int a[1001];
int len[1001]={0};
int n,j,max,k,longset;
longset=1;
scanf("%d",&n);
for(j=1;j<=n;j++)
scanf("%d",&a[j]);
len[1]=1;
for(j=2;j<=n;j++)
{
max=1;
for(k=1;k<j;k++)
{
if(a[k]<a[j])
{
if(len[k]+1>max)
max=len[k]+1;
}
}
len[j]=max;
if(max>longset)
longset=max;
}
printf("%d\n",longset);
}
2.求一个数组的连续的和最大的一部分数列(淘宝笔试)
#include<stdio.h>
void main()
{
int a[11]={0,-1,-2,-3,4,5,-8,7,6,11,-2};
int sum[11]={0};
int biggest;
int start,end;
int i;
sum[1]=a[1];
biggest=sum[1];
start=end=1;
for(i=2;i<11;i++)
{
if(sum[i-1]+a[i]>a[i])
{
sum[i]=sum[i-1]+a[i];
if(sum[i]>biggest)
{
biggest=sum[i];
end=i;
}
}
else
{
sum[i]=a[i];
if(sum[i]>biggest)
{
biggest=sum[i];
start=i;
end=i;
}
}
}
printf("%d %d %d\n",start,end,biggest);
}