记忆化搜索,dfs,深度优先搜索
用递归来写;
因为要记忆化,所以要返回一个数,
递归出口;
如果当前递归已经求过答案,直接返回答案;
在递归中,求出 res,如果有多种情况要求取最小值,res = min( res, x ),x 是其他情况的结果;
用一个 数组、unordered_map 存储当前情况的最优值是 res ;
返回 res ;
记忆化,递归,0,1 背包问题:
int dfs(int i,int j){
if(ans[i][j]!=-1) return ans[i][j]; // 当前递归已经求过答案,直接返回答案
int res;
if(i==n+1) return 0; // 递归出口
if(j<v[i]) res=dfs(i+1,j);
else res=max(dfs(i+1,j),dfs(i+1,j-v[i])+w[i]); // 多种情况,res 取题目要求的最值
ans[i][j]=res; // 存储当前情况的最优值是 res
return res; // 返回当前情况的最优值 res
}