Pku acm 1887 Testing the CATCHER 动态规划题目解题报告(十一)

http://acm.pku.edu.cn/JudgeOnline/problem?id=1887

题目叙述很繁琐,其实就是求最长下降子序列,这一类题也是动态规划的典型题。这类问题有两种算法,一种 T(o) = O(n^2),另一种T(o) = O(nlogn),这里用第一种,在1631 Bridging signals的解题报告中介绍第二种。

创建一个一维数组num_array[j]max_array[],num_array[j]表示序列的元素,max_array[i]表示以第i个元素结尾的序列中的最长下降子序列,初始化为1,对于一个max_array[i],遍历前面的每个元素j,如果num_array[j]> num_array[i]max_array[j]>= max_array[i],那么max_array[j]就要加1,所以递推公式为:

if(num_array[i]<=num_array[j]&&max_array[i]<=max_array[j])

         max_array[i]++;

最后选最大的一个max_array[i]就是最长下降子序列的个数。Java关键部分的代码:

for(int i=1;i<length;i++){

         for(int j=0;j<i;j++){

            if(num_array[i]<=num_array[j]&&max_array[i]<=max_array[j])

                max_array[i]++;

         }

         max_value = (max_array[i]>max_value)?max_array[i]:max_value;

}

max_value是最后的结果。

带有详细注释的代码可以在http://download.csdn.net/user/china8848/获得
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值