记忆化搜索,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

}

全部评论

相关推荐

投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务