您的位置:首页 > 其它

最长不下降子序列 (动态规划)

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
);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: