二维未优化的动态规划的理解
动态规划的实质就是使用分治的思想,将当前的大问题分割成一个一个小问题来解决,最后用递推来实现每种问题之间的联系。未优化的动态规划就是使用二维数组来存储每种状态(按照我目前学的进度是这样,不能绝对的说)。
本质是对每一个小问题求出最优解,并且用递推的思想的来这种最优解的状态送到下一个问题,使得下一个问题能在保持上一个问题的最优解的情况下求当前问题的最优解。
例如:洛谷P1216(这题也是动态规划的入门题,易于理解)
上代码:
1 #include<iostream> 2 using namespace std; 3 const int N=1010; 4 int dp[N][N]; 5 int main() 6 { 7 int n; 8 cin>>n; 9 for(int i=1;i<=n;i++) 10 for(int j=1;j<=i;j++) 11 cin>>dp[i][j]; 12 for(int i=1;i<=n;i++) 13 for(int j=1;j<=i;j++) 14 dp[i][j]+=max(dp[i-1][j],dp[i-1][j-1]); 15 int ans=0; 16 for(int j=1;j<=n;j++) 17 ans=max(ans,dp[n][j]); 18 cout<<ans<<endl; 19 return 0; 20 }