| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 538 人关注过本帖
标题:最长上升子序列,哪位高手帮我看下哪里出问题了啊。。。
只看楼主 加入收藏
lhp3774848
Rank: 2
来 自:福建省
等 级:论坛游民
帖 子:46
专家分:77
注 册:2011-5-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
最长上升子序列,哪位高手帮我看下哪里出问题了啊。。。
#include<stdio.h>
#include<stdlib.h>
main()
{
      int i,j,k=0,s,p,a[100],n[100],m[100];
      printf("n=");
      scanf("%d",&s);
      for(i=1;i<=s;i++)
       scanf("%d",&a[i]);
      for(i=1;i<=s;i++)
      {
       printf("%d\t",a[i]);
      }
       printf("\n");
      for(i=1;i<=s-1;i++)
      {
       for(j=i+1;j<=s;j++)
       {
         if(a[j]<a[j-1])
         {
           k++;
           n[k]=i;
           m[k]=j;
           break;
         }
        }
       }
       p=m[1]-n[1]+1;
       for(i=1;i<=k;i++)
       {
        if(p<m[i]-n[i]+1)
        p=m[i]-n[i]+1;
       }
       printf("最长的上升子序列个数为:%d\n",p);
       system("pause");
}
好像多了一位
搜索更多相关主题的帖子: include 
2011-05-25 19:45
lhp3774848
Rank: 2
来 自:福建省
等 级:论坛游民
帖 子:46
专家分:77
注 册:2011-5-3
收藏
得分:0 
对了  上面的题目是: 最大上升子序列个数

给定n个整数,从左到右选若干个整数,可以构成一个上升的子序列。求最长的上升子序列的个数是多少?

2011-05-25 19:47
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:5 
什么是最长升子序列啊?

My life is brilliant
2011-05-25 19:50
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
其实这种题应该用动态规划做

状态转移方程为  f(i) = max{f(k)+1}(1<=k<i) 这样就不会出错
程序代码:
#include<stdio.h>
#include<stdlib.h>
main()
{
      int i,j,k=0,s,p,a[100],n[100],m[100];
      printf("n=");
      scanf("%d",&s);
      for(i=1;i<=s;i++)
       scanf("%d",&a[i]);
      for(i=1;i<=s;i++)
      {
       printf("%d\t",a[i]);
      }
       printf("\n");
       m[1] = 1;
       for(i = 2;i<=s;i++)
       {          
           int max = 1;
           for(k = 1;k<i;k++)
               if(a[k] > a[i] && m[k]>m[max])
                   max = k;
           m[i] = m[max]+1;
       }
       printf("最长的上升子序列个数为:%d\n",m[s]);
       system("pause");
}
图片附件: 游客没有浏览图片的权限,请 登录注册

                                         
===========深入<----------------->浅出============
2011-05-25 20:16
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:5 
恩,顶4L,虽然没看懂。

My life is brilliant
2011-05-25 20:41
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
收藏
得分:5 

#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX=100100;
int num[MAX],top=0;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        scanf("%d",&num[0]);
        top=1;
        for(int i=1;i!=n;i++)
        {
            scanf("%d",&num[i]);
            int * p=lower_bound(num,num+top,num[i]);
            if(p-num==top) ++top;
            *p=num[i];
        }
        printf("%d\n",top);
    }
   
}        
2011-05-25 20:56
lhp3774848
Rank: 2
来 自:福建省
等 级:论坛游民
帖 子:46
专家分:77
注 册:2011-5-3
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
main()
{
      int i,j,k=0,s,p;
      int a[100],n[100],m[100];
      printf("n=");
      scanf("%d",&s);
      for(i=1;i<=s;i++)
       scanf("%d",&a[i]);
       a[s+1]=-20;
      for(i=1;i<=s;i++)
      {
       printf("%d\t",a[i]);
      }
       printf("\n");
      for(i=1;i<=s-1;i++)
      {
       for(j=i+1;j<=s+1;j++)
       {
         if(a[j]<a[j-1]||a[j]==-20)
         {
            k++;
            n[k]=i;
            m[k]=j-1;
            break;
         }
        }
       }
       int q;
       p=m[1]-n[1]+1;
       for(i=1;i<=k;i++)
       {
        if(p<m[i]-n[i]+1)
        {
        p=m[i]-n[i]+1;
        q=i;
        }
       }
       if(s==1)
       {
       printf("最长上升子序列个数为:1\n");
       printf("是:%d\n",a[1]);
       }
       else if(p==s)
       {
       printf("最长的上升子序列个数为:%d\n",p);
       printf("是:");
       for(i=1;i<=s;i++)
       printf("%d\t",a[i]);
       printf("\n");
       }
       else
       {
       printf("最长的上升子序列个数为:%d\n",p);
       printf("是:");
       for(i=n[q];i<=m[q];i++)
       printf("%d\t",a[i]);
       printf("\n");
       }
       system("pause");
}
想了半天这个终于可以了,呵呵。   不过4楼的那个好像不行,比如输入1 2 3 4 5 就错
2011-05-25 21:49
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
main()
{
      int i,j,k=0,s,p,a[100],n[100],m[100];
      printf("n=");
      scanf("%d",&s);
      for(i=1;i<=s;i++)
       scanf("%d",&a[i]);
      for(i=1;i<=s;i++)
      {
       printf("%d\t",a[i]);
      }
       printf("\n");
       m[1] = 1;
       for(i = 2;i<=s;i++)
       {         
           m[i] = 1;
           int max = 0;
           for(k = i-1;k>=1;k--)
           {
               if(a[k] < a[i] && m[k]>max)
                   max = m[k];
           }
           m[i]+=max;
       }
       printf("最长的上升子序列个数为:%d\n",m[s]);
       system("pause");
}

                                         
===========深入<----------------->浅出============
2011-05-26 11:29
王者自谦1992
Rank: 2
等 级:论坛游民
帖 子:57
专家分:74
注 册:2011-4-6
收藏
得分:0 
不懂啊,揉头....
2011-05-26 11:30
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
main()
{
      int i,j,k=0,s,p= 1,a[100],n[100],m[100];
      printf("n=");
      scanf("%d",&s);
      for(i=1;i<=s;i++)
       scanf("%d",&a[i]);
      for(i=1;i<=s;i++)
      {
       printf("%d\t",a[i]);
      }
       printf("\n");
       m[1] = 1;
       for(i = 2;i<=s;i++)
       {        
           m[i] = 1;
           int max = 0;
           for(k = i-1;k>=1;k--)
           {
               if(a[k] < a[i] && m[k]>max)
                   max = m[k];
           }
           m[i]+=max;
           if(m[i] > p)
               p = m[i];
       }
       printf("最长的上升子序列个数为:%d\n",p);
       system("pause");
}

                                         
===========深入<----------------->浅出============
2011-05-26 22:27
快速回复:最长上升子序列,哪位高手帮我看下哪里出问题了啊。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019850 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved