求最大连续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背包问题,需要二维数组,有两个纬度 容量和钱数 记录的是最大价值。
购物单一样,需要二维数组,有两个纬度 个数和钱数 记录的是最大满意度。
放苹果的问题 也是两个纬度 苹果数和盘子数 记录的是有几种放法。