您的位置:首页 > 其它

算法练习--- DP 求解最长上升子序列(LIS)

2015-06-29 11:41 281 查看
问题描述:
对于2,5,3,1,9,4,6,8,7,找出最长上升子序列的个数
最长上升子序列定义:
对于i<j i,j∈a[0...n] 满足a[i]<a[j]

1. 找出DP公式:
dp[i] = dp[j] + 1  (j<i && a[j]<a[i] && dp[i] < dp[j]+1)

2.实现代码

void Main()
{
DP_LIS();
Console.WriteLine(dpArr);
}

static int[] arr = new int[9]{2,5,3,1,9,4,6,8,7};
static int n = 9;
static int[] dpArr = new int[9];

static void DP_LIS(){

for(var i= 0;i < n; i++){
dpArr[i] = 1;
for(var j = 0;j < i; j++){
if(arr[j]<arr[i] && dpArr[i] < dpArr[j] + 1){
dpArr[i]  = dpArr[j]+1;
}
}

}

}


dpArr[0...n-1]中,最大的元素即为所求。作为联系,本例打印出了dp数组中的所有元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: