算法练习--- 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.实现代码
dpArr[0...n-1]中,最大的元素即为所求。作为联系,本例打印出了dp数组中的所有元素
对于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数组中的所有元素
相关文章推荐
- 一波实用的Bash Shell整理
- 滴滴快的真值150亿美元吗?
- ios画图 划线的两种方式
- 1283 最简单的计算机
- 每天进步一点点——再次了解Linux进程ID
- 微信支付二维码native原生支付开发模式一
- du命令
- gis服务
- SVN的介绍和使用
- Windows 10正式版转身变服务 微软收益模式将转变
- 关于android的命名空间
- nginx配置文件粗解
- iOS IAP恢复
- Android 编程下 SQLite 大数据量操作优化(插入操作)
- 随手一记
- Vim 批量替换
- php循环跳出
- 不用翻墙更新SDK
- Win8更换桌面主题(壁纸、窗口颜色)的操作步骤
- 欢迎使用CSDN-markdown编辑器