第三章作业
1.1
设置dp[i][j]表示从左上角[1][1]走到[i][j]所需要的最少费用,mp[i][j]存[i][j]本身要花费的费用。
题目中说只能走2n-1步,那也就是只能往右走或者往下走,[i][j]只能从[i][j-1]或者[i-1][j]走到,要使得到 [i][j]的费用最小也就是保证以上两个位置最小,这就是最优子结构。
当i>1&&j>1, dp[i][j] = min(dp[i][j-1],dp[i-1][j]) + mp[i][j];
边界就是dp[1][1] = mp[1][1];
if(i1&&j>1) dp[1][j] = dp[1][j-1]+mp[1][j];
if(j1&&i>1) dp[i][1] = dp[i-1][1]+mp[i][1];
1.2
是一个二维表格,要填入的就是对于1<=i<=n,1<=j<=n,dp[i][j]均填入,填表顺序依赖左侧的dp[i][j-1]以及上 侧 的dp[i-1][j],也就是从上到下从左到右,问题最优值就是dp[n][n]。
1.3
时间复杂度是O(n2),因为两层for循环,空间复杂度也是O(n2),因为二维数组
2.0
其实动态规划就是暴搜,把一个大问题拆成相同的小问题,然后暴搜每一种可能性,来找到最小值,定好边界条件,最后一步步把最优子问题的值上传给大问题,最后得到整个问题的最优值
浙公网安备 33010602011771号