简单动态规划问题的分析
有一个数组arr【7】={1,2,4,1,7,8,3},求不相邻数字的最大值。
动态规划从最后一个算起,设取每个下标的解opt,一个数有两种情况,选或不选,如下图所示
在这里插入代码片public class Onejava {
public static void main(String args[])
{int[] arr= {1,2,4,1,7,8,3};
int sum=dp_opt(arr);
System.out.println(sum);
}
/*public static int rec_dp(int arr[],int i) { //递归
if(i==0)
return arr[0];
else if(i==1)
return max(arr[0],arr[1]);
else
{int A=rec_dp(arr,i-1);
int B=rec_dp(arr,i-2)+arr[i];
return max(A,B);
}
}*/
public static int max(int a,int b)
{if(a>b)
return a;
else
return b;
}
public static int dp_opt(int arr[]) //非递归
{int[] opt=new int[7];
opt[0]=arr[0];
opt[1]=max(arr[0], arr[1]);
for(int j=2;j<opt.length;j++)
{int A=opt[j-2]+arr[j];
int B=opt[j-1];
opt[j]=max(A, B);
}
return opt[arr.length-1]; //返回opt数组的最后一个下标的值
}
}