最长不下降子序列 (动态规划)
2018-03-19 17:00
399 查看
什么是最长不下降子序列?指的是从序列中选出若干个数组成一个新的序列,不改变他们的队伍的顺序,要求新的序列里xi≤xi+1≤xi+1.....举个例子{4,6,5,7,3},最长不下降子序列就是{4,6,7}。同样的,还有最长不上升子序列。现在出一个序列,要求你找出最长不下降序列,并输出其长度是多少。思路:典型的动态规划问题,状态转移方程见代码。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[] A = new int[N+1];
int[] dp = new int[N+1];
A[0] = 0;
for(int i=1; i<=N; i++)
{
A[i] = scanner.nextInt();
}
Arrays.fill(dp, 1);
for(int i=2; i<=N; i++)
{
for(int j=1;j<i;j++)
{
if(A[i] >= A[j])
{
dp[i] = Math.max(dp[i], dp[j]+1); //状态转移方程
}
}
}
Arrays.sort(dp);
System.out.println(dp
);
}
}
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[] A = new int[N+1];
int[] dp = new int[N+1];
A[0] = 0;
for(int i=1; i<=N; i++)
{
A[i] = scanner.nextInt();
}
Arrays.fill(dp, 1);
for(int i=2; i<=N; i++)
{
for(int j=1;j<i;j++)
{
if(A[i] >= A[j])
{
dp[i] = Math.max(dp[i], dp[j]+1); //状态转移方程
}
}
}
Arrays.sort(dp);
System.out.println(dp
);
}
}
相关文章推荐
- 最长不下降子序列 动态规划
- 动态规划实现最大连续子序列和,最长不下降子序列和最长公共子序列
- 【最长下降子序列】【动态规划】【二分】XMU 1041 Sequence
- 【C】动态规划--最大连续子序列和/最长不下降子序列/最长公共子序列/最长回文子串/DAG最长路
- hdu1160 FatMouse's Speed 最长下降子序列 动态规划
- 求最长不下降序列(动态规划)
- 求最长不下降序列(动态规划)
- (2)最长不下降子序列问题____动态规划
- 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截
- 【动态规划】【二分】【最长下降子序列】XMU 1041 Sequence
- 【网络流24题】最长不下降子序列(最大流,动态规划)
- joj 2529 Chorus 动态规划 最长上升子序列和最长下降子序列
- 最长不下降子序列(动态规划)
- 10.26最后的模拟DAY2 改造二叉树[中序遍历+严格递增的最长不下降子序列]
- poj 1836 Alignment( 最长上升(下降)子序列 )
- 【动态规划】【二分】【最长上升子序列】HDU 5773 The All-purpose Zero
- 【动态规划】【二分】【最长上升子序列】HDU 5773 The All-purpose Zero
- 最长不下降序列
- wust oj 1867 (输出最长不下降子序列)【最长序列输出类模板】
- 最长单调递增子序列--动态规划