动态规划 最长递增子序列 oj合唱团问题
来源:互联网 发布:明源售楼软件 编辑:程序博客网 时间:2024/05/18 00:25
HWOJ 合唱团问题
用空间解决时间复杂度,建立两个数组left和right,存储数组从左/从右以每个数字为最终节点的最长递增子序列。两个数组相加某位最大值即为题目要求的排列。因为重复了一个公共节点多算了一个1,所以求几位同学出列时,还要再加上1。结果为L.length-max+1
以此题为例
LEFT数组为 1 1 1 2 2 1 3 4
RIGHT数组为 3 3 2 3 2 1 1 1
关键代码
求到每一个数为止的最长递增子序列的个数,即为前一个小于该数的数的最长递增子序列值+1;
left[0]=1; for(int i=1;i<L.length;i++){ left[i]=1; //设置默认值1 即自身 for(int j=0;j<i;j++){ //判断递增和 if(L[j]<L[i] && left[j]>left[i]-1){ left[i] = left[j]+1; } } }
应该满足两个条件都不能少,一个是数值大小的比较,另一个是子序列个数的比较,后面式子我也不太完全能理解,目前个人理解就是如果反过来推倒,left[j]+1还<=left[i],那么left[i]也没有必要再等于left[j]+1了不是?加了一还没自己大?这显然不是我们想要的结果,所以必须使得left[j]+1>left[i],这样left[i]才能取得最大值!
java解法如下
package test0114;import java.util.Scanner; public class oj2 { public static void main(String[] args) { Scanner reader = new Scanner(System.in); while(reader.hasNext()){ int N = reader.nextInt(); int[] L = new int[N]; for(int i=0;i<L.length;i++){ L[i]=reader.nextInt(); } int[] left = new int[L.length]; int[] right = new int[L.length]; int MAX = 0; left[0]=1; for(int i=1;i<L.length;i++){ left[i]=1; for(int j=0;j<i;j++){ if(L[j]<L[i] && left[j]>left[i]-1){ left[i] = left[j]+1; } } } right[L.length-1] = 1; for(int i=L.length-2;i>=0;i--){ right[i] = 1; for(int j=L.length-1;j>i;j--){ if(L[j]<L[i] && right[j]>right[i]-1){ right[i] = right[j]+1; } } } for(int i=0;i<L.length;i++){ if(left[i]+right[i]>MAX){ MAX = left[i]+right[i]; } } System.out.println(L.length-MAX+1); } reader.close(); } }
0 0
- 动态规划 最长递增子序列 oj合唱团问题
- 动态规划最长递增子序列问题
- 最长递增子序列问题---动态规划
- 动态规划6:最长递增子序列问题
- 动态规划之最长递增子序列问题详解
- 矩形嵌套--动态规划--最长递增子序列问题变形
- 动态规划算法之最长递增子序列问题
- 动态规划4:LIS最长递增子序列问题
- 递归与动态规划---最长递增子序列问题
- 最长递增子序列问题——动态规划
- 最长递增子序列(动态规划)
- 动态规划:最长单调递增子序列
- 动态规划之最长递增子序列
- 动态规划--最长单调递增子序列
- 最长递增子序列(动态规划)
- 动态规划_最长递增子序列
- 动态规划之最长递增子序列
- 【动态规划】单调递增最长子序列
- UICollectionView高级进阶篇
- 时间序列(二)
- Android Paint 学习总结
- 欢迎使用CSDN-markdown编辑器
- Cow Contest(Poj 3660)
- 动态规划 最长递增子序列 oj合唱团问题
- xml基础
- SpringMVC详细示例实战
- 2016 小灶1 G (POJ1456)
- 问题三十:《Ray Tracing In One Weekend》封面图形生成
- 加固tomcat,使之运行在chroot环境
- pyftpdlib库实现简单认证服务器
- 错误crontab: "/bin/vi" exited with status 127
- 如何1分钟制作自己的软件