| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:请教一个问题,不胜感谢
只看楼主 加入收藏
小蝎子
Rank: 1
等 级:新手上路
帖 子:9
专家分:8
注 册:2010-3-2
收藏
得分:5 
回复 6楼 encounter
你的源代码好像不能通过VC++6.0编译,变量的定义应该函数中最先进行。代码不错,修改了一下,通过编译了。。。

#include<stdio.h>

//全局变量
int a[]={7,300,275,215,245,198,150,235};
int b[20];//存放以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度。
int num=10;//num为a数组的长度
int k;//存放最大递增子串最后一个元素的下标

//求出b[i]中最大的值,并将其下标存在k中
int Max()
{
    int i=0;
    int temp=0;
    for(i=0;i<num;i++)
    {
        if(b[i]>temp)
        {
            temp=b[i];
            k=i;
        }
    }
    return temp;
}

// 以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度存到b[i]中
int Lis()
{
    int k;
    int i,j;
    b[0]=1;//以a[0]为最后元素的子串只有a[0],所以长度为1.
   
    for (i=1;i<num;i++)
    {
        k=0;
        for(j=0;j<i;j++)
        {
            if(a[j]<=a[i]&&k<b[j])
            {
            //比较所有小于a[i]并位于a[i]前面的最大子串的长度。比如3 6 4 5,那么以5结尾的最大子串长度
            //等于:max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
                k=b[j];
            }
        }
        b[i]=k+1;//max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
    }
    return Max();
}



void main()
{
    printf("最大递增子串的长度为:%d\n",Lis());
    printf("非递增个数:%d\n",8-Lis());
   
}
2010-08-30 13:19
mlyljc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-3-11
收藏
得分:0 
不好意思,之前是凭印象把题目写了出来。今天,找到原题了。
原题是:求整数序列中非递增子序列的最大长度。
输入:整数N(表示序列长度),N个整数
输出:整数M(表示最长非递增子序列长度)
例如:输入:7 300 250 275 252 200 138 245
      输出:5
      (最长非递增子序列为:300 275 252 200 138)
2010-08-30 20:47
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:5 
一动态规划题目。。。。。
2010-08-31 14:30
快速回复:请教一个问题,不胜感谢
数据加载中...
 
   



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

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