Redraiment的走法(最长递增子序列问题的求解--dp问题)

输入描述:

输入多行,先输入数组的个数,再输入相应个数的整数

输出描述:

输出结果

输入例子:

6
2
5
1
5
4
5

输出例子:

3

提示

Example: 
6个点的高度各为 2 5 1 5 4 5 
如从第1格开始走,最多为3步, 2 4 5 
从第2格开始走,最多只有1步,5 
而从第3格开始走最多有3步,1 4 5 
从第5格开始走最多有2步,4 5

所以这个结果是3。

//最长递增子序列问题--动态规划问题

 

 1 import java.util.*;
 2 public class Test2{
 3     public static void main(String[] args) {
 4         Scanner sc = new Scanner(System.in);
 5         while(sc.hasNext()) {
 6             int n = sc.nextInt();
 7             int[] nums = new int[n];
 8             int[] dp = new int[n];
 9             for(int i=0; i<n; i++) {
10                 nums[i] = sc.nextInt();
11             }
12             dp[0] = 1;
13             int maxdp = 1;
14             for(int i = 1;i<n;i++){
15                 dp[i] = 1;
16                 for(int j = 0;j<i;j++){
17                     if(nums[j]<nums[i]&&dp[j]>dp[i]-1)
18                         dp[i] = dp[j] + 1;
19                 }
20                 System.out.println(dp[i]);
21                 if(dp[i]>maxdp){
22                     maxdp = dp[i];
23                 }
24             }
25             // for(int i=1; i<n; i++) {
26                 // System.out.println(dp[i]);
27             // }    
28             // System.out.println(dp[n-1]);
29             System.out.println(maxdp);
30         }
31     }
32 }
View Code

// 最长递增子序列:
// 动态规划
// dp[i] = max(dp[j]) + 1;
// 0<j<i&&num[i]>num[j]

主要参考:http://www.cnblogs.com/lonelycatcher/archive/2011/07/28/2119123.html

http://www.cnblogs.com/zhourongqing/archive/2012/04/14/2446601.html

http://my.oschina.net/hengjie/blog/124257

http://www.2cto.com/kf/201405/298201.html

https://www.felix021.com/blog/read.php?1587

 



转载于:https://www.cnblogs.com/lydandan/p/5788811.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值