您的位置:首页 > 其它

NYOJ+最长上升子序列动态规划+数组因为输入数据时从位置0开始后面dp也是从0开始

2015-09-02 09:53 281 查看
点击打开链接
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
int main()
{
char Arr[10005]={'\0'};
int n=0,len=0,seqlen[10005]={0},i=0,j=0,maxn=0,maxlen=0;
scanf("%d",&n);
while(n--)
{
memset(Arr,'\0',sizeof(Arr));
scanf("%s",Arr);
len=strlen(Arr);
maxlen=1;
for(i=0;i<len;i++)
seqlen[i]=1;
for(i=1;i<len;i++)
{
maxn=0;
for(j=0;j<i;j++)
{
if(Arr[j]<Arr[i]&&seqlen[j]>maxn)///在前i-1个序列中,寻找以终点小于Arr[i]的最长的子序列,即最优子状态
{
maxn=seqlen[j];///前面最长的
}
}
seqlen[i]=maxn+1;
if(seqlen[i]>maxlen)///seqlen中保存的是第i个数为终点的最长上升序列,找出这个数组中最大的值即为最优序列长度
maxlen=seqlen[i];
}
printf("%d\n",maxlen);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: