算法第3章作业
对动态规划的理解(递归解法)
- 确定递归出口
- 直接返回已计算过的子问题的解
- 对于没计算过的问题,用其子问题的解将其算出
7-1
其中\(dp[i]\)表示前i个数字在包含\(a[i]\)情况下的最长上升子序列的长度
int solve(int k)
{
if (dp[k])
return dp[k];
for (int i=1;i<k;++i)
if (a[i] < a[k] && dp[k] < solve(i) + 1)
dp[k] = dp[i] + 1;
return dp[k];
}
7-2
其中\(solve(i,j)\)表示从\(i\)到\(j\)的最小花费
int solve(int i,int j)
{
if (dp[i][j])
return dp[i][j];
if (j - i == 1)
return dp[i][j] = price[i][j];
int M = price[i][j];
for (int k = i+1; k < j; ++k)
M = min(M,solve(i,k) + solve(k,j));
return dp[i][j] = M;
}
结对编程情况
- 队友太强了,希望它能多带带我

浙公网安备 33010602011771号