动态规划补充2

29 阅读1分钟

求最大连续bit数

public static void main(String[] args) {
        int n = 200;
        String s = Integer.toBinaryString(n);
        int[] dp = new int[s.length()];
        dp[0] = 1;
        int max = 0;
        for(int i = 1; i < s.length();i++){
            if('1' == s.charAt(i)){
                dp[i] = dp[i-1] + 1;
            }else{
                dp[i] = 0;
            }
            max = Math.max(max,dp[i]);
        }
        System.out.println(max);
    }

这个动态规划的使用场景多的很,之前说了首先是初始状态的查找分辨,然后是动态转移方程,这个动态转移方程的精髓是什么?从简单的开始计算,然后记录结果(状态),并将结果(状态)用于之后的计算。

像这个求最大连续数的这个就比较简单,仅需要以为数组,记录当前位置连续数的长度,之后如果是1就加1,如果不是1就置为0。

那个斐波那契数列数列的也是需要以为数组,记录当月兔子的个数。

01背包问题,需要二维数组,有两个纬度 容量和钱数 记录的是最大价值。

购物单一样,需要二维数组,有两个纬度 个数和钱数 记录的是最大满意度。

放苹果的问题 也是两个纬度 苹果数和盘子数 记录的是有几种放法。