主题:递归搜索问题~
这两天学习动态规划,先从递归改进做起。题目是这样的:
在一个最多含有10000的整数(每个数小于10000)序列中找出一个最长的递减子序列.
代码如下(C#):
[code=c]
using System;
using System.Collections.Generic;
using System.Text;
namespace 动态规划问题
{
class Program
{
static void Main(string[] args)
{
int[] str ={[color=FF0000] 9, 8, 7, 6, 5,4,1,1[/color] };
int n = Check(0, 0, str[0], str.Length, str);
Console.WriteLine(n);
}
/// <summary>
/// 递归搜索算法
/// </summary>
/// <param name="start">开始搜索起点</param>
/// <param name="len">已经匹配的数目</param>
/// <param name="minValue">当前最小值</param>
/// <param name="n">所求数组长度</param>
/// <param name="str">所求数组</param>
/// <returns></returns>
static int Check(int start, int len, int minValue,int n,int[] str)
{
int better, best = len;
for (int i = start; i < n; i++)
{
if (str[i] < minValue)
{
better = Check(i, len + 1, str[i], n, str);
if (better > best)
{
best = better;
}
}
}
return best;
}
}
}
[/code]
在当前序列下求得的结果为6,但是把序列改成9, 8, 7, 6, 5,4,6,1后结果还是6,不知道为什么?
在一个最多含有10000的整数(每个数小于10000)序列中找出一个最长的递减子序列.
代码如下(C#):
[code=c]
using System;
using System.Collections.Generic;
using System.Text;
namespace 动态规划问题
{
class Program
{
static void Main(string[] args)
{
int[] str ={[color=FF0000] 9, 8, 7, 6, 5,4,1,1[/color] };
int n = Check(0, 0, str[0], str.Length, str);
Console.WriteLine(n);
}
/// <summary>
/// 递归搜索算法
/// </summary>
/// <param name="start">开始搜索起点</param>
/// <param name="len">已经匹配的数目</param>
/// <param name="minValue">当前最小值</param>
/// <param name="n">所求数组长度</param>
/// <param name="str">所求数组</param>
/// <returns></returns>
static int Check(int start, int len, int minValue,int n,int[] str)
{
int better, best = len;
for (int i = start; i < n; i++)
{
if (str[i] < minValue)
{
better = Check(i, len + 1, str[i], n, str);
if (better > best)
{
best = better;
}
}
}
return best;
}
}
}
[/code]
在当前序列下求得的结果为6,但是把序列改成9, 8, 7, 6, 5,4,6,1后结果还是6,不知道为什么?