动态规划
本文最后更新于230 天前,其中的信息可能已经过时,如有错误请发送邮件到qiqin-chang@qq.com

线性DP:

最长单调子序列:

以最最长递增子序列为例:

说明:输出最长递增子序列的长度,递增子序列为数组中单调递增的元素的最大个数,元素不必相邻,但相对位置必须一致

import java.util.Scanner;
​
public class Main {
    public static void main(String[] args) {
        //输入
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[n][2];
        for (int i = 0; i < n; i++) {
            arr[i][0] = sc.nextInt();
        }
​
        //计算
        for (int i = 0; i < n; i++) {
            arr[i][1] = 1;
            for (int j = 0; j < i; j++) {
                if(arr[i][0] > arr[j][0]){
                    arr[i][1] = Math.max(arr[i][1], arr[j][1]+1); //赋值比当前元素小的前一个元素的长度+1与1之间的最大值
                }
            }
        }
​
        //获取最大递增子序列长度
        int max = 0;
        for (int i = 0; i < n; i++) {
            max = Math.max(max, arr[i][1]);
        }
        //输出
        System.out.println(max);
        
    }
}

最大连续子序列和:

import java.util.Scanner;
​
//最大连续子序列和
//测试用例 -2,11,-4,13,-5,-2
public class study05 {
    public static void main(String[] args) {
        //输入
        Scanner sc = new Scanner(System.in);
        String[] s = sc.nextLine().split(",");
        int[] a = new int[s.length+1];
        a[0] = 0;
        for(int i=1;i<=s.length;i++){
            a[i] = Integer.parseInt(s[i-1]);
        }
​
        //计算
        int[] dp = new int[a.length];
        for(int i=1;i<s.length;i++){
            dp[i] = 0;
            //转移方程
            dp[i] = Math.max(dp[i]+a[i],a[i]);
        }
​
        //输出
        int max = 0;
        for(int i=1;i<a.length;i++){
            if(dp[i]>max){
                max = dp[i];
            }
        }
        System.out.println(max);
    }
}

最长公共子序列:(双序列)(二维dp)

import java.util.Scanner;
​
//最长公共子序列
//测试用例 BDCABC ABCBDAB 
public class Main {
    public static void main(String[] args) {
        //输入
        Scanner sc = new Scanner(System.in);
        String[] s1 = sc.nextLine().split("");
        String[] s2 = sc.nextLine().split("");
        int[][] arr = new int[s1.length+1][s2.length+1];
        //计算
        for(int i=1;i<arr.length;i++){
            for(int j=1;j<arr[i].length;j++){
                //转移方程
                if(s1[i-1].equals(s2[j-1])){
                    arr[i][j] = arr[i-1][j-1]+1;
                }else {
                    arr[i][j] = Math.max(arr[i-1][j], arr[i][j-1]);
                }
            }
        }
        //输出
        System.out.println(arr[arr.length-1][arr[0].length-1]);
    }
}

背包DP:

01背包:

//01背包
public class Main {
    public static void main(String[] args) {
        //输入
        int[] w = {2,3,4}; //物品重量
        int[] v = {3,5,6}; //物品价值
        int n = 6; //背包容量
​
        int[][] arr = new int[w.length+1][n+1];
​
        //计算
        for (int i = 1; i < w.length+1; i++) {
            for (int j = 1; j < n+1; j++) {
                //转移方程
                if (j<w[i-1]) {
                    arr[i][j]=arr[i-1][j];
                }else{
                    arr[i][j]=Math.max(arr[i-1][j],arr[i-1][j-w[i-1]]+v[i-1]);
                }
            }
        }
​
        //输出
        System.out.println(arr[w.length][n]);
    }
}

完全背包:

//完全背包
public class Main {
    public static void main(String[] args) {
        //输入
        int[] w = {2,3,4}; //物品重量
        int[] v = {3,5,6}; //物品价值
        int n = 6; //背包容量
​
        int[][] arr = new int[w.length+1][n+1];
​
        //计算
        for (int i = 1; i < w.length+1; i++) {
            for (int j = 1; j < n+1; j++) {
                //转移方程
                if (j<w[i-1]) {
                    arr[i][j]=arr[i-1][j];
                }else{
                    arr[i][j]=Math.max(arr[i-1][j],arr[i][j-w[i-1]]+v[i-1]);
                }
            }
        }
​
        //输出
        System.out.println(arr[w.length][n]);
    }
}
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇