其他分享
首页 > 其他分享> > 学习更新2021年10月

学习更新2021年10月

作者:互联网

2021-10-19

一本通 1264:【例9.8】合唱队形

一本通 1264:【例9.8】合唱队形

一本通的题,想明白了很简单,想不明白比较复杂。就是从左到右是升序子序列,而从右边到左也是升序子序列。两个dp数组,一个从左到右计算最大升序子序列。一个从右往左计算最大升序子序列。最后做一个合并。看每个位置dp1[i]+dp2[i] 的最大值,减去重复的i位置的值,就是最大值了。

public int res(int[] t) {

        int dp1[] = new int[t.length];
        int dp2[] = new int[t.length];
        for (int i = 0; i < t.length; i++) {
            dp1[i] = 1;
            for (int j = 0; j < 1; j++) {
                if (t[i] > t[j]) {
                    dp1[i] = Math.max(dp1[j] + 1, dp1[i]);
                }
            }
        }

        for (int i = t.length - 1; i >= 0; i--) {
            dp2[i] = 1;
            for (int j = t.length - 1; j > i; j--) {
                if (t[i] > t[j]) {
                    dp2[i] = Math.max(dp2[j] + 1, dp2[i]);
                }
            }
        }

        int max = 1;
        for (int i = 0; i < t.length; i++) {
            max = Math.max(dp1[i] + dp2[i], max);
        }
        System.out.println(max-1);
        return max - 1;
    }

标签:10,dp2,dp1,int,max,更新,length,2021,升序
来源: https://www.cnblogs.com/mxjhaima/p/15423103.html