本文共 715 字,大约阅读时间需要 2 分钟。
/* 题意:给一个DAG图,n个节点,每个节点都对应一个值,入度为零的点走到出度为零的点,计算所有可能路径 经过节点值的和最大! 思路:记忆话搜索:也就是如果我们搜索到某一个节点的时候发现该节点已经存在了值,那么直接返回该节点的值! 和回溯的思想差不多吧! 注意:我们是正向建图,并且记忆话搜索是先将子节点的最优值计算出来,然后在计算父节点的最优值 所以最终的最优值的结果在 入度为0的节点上! */#include#include #include #include #include #define INF -0x3f3f3f3f#define N 100005using namespace std;vector g[N];int v[N], dp[N], vis[N];int n, m;int dfs(int u){ if(g[u].size()==0) return dp[u]=v[u]; if(dp[u]!=INF) return dp[u];//如果u节点已经根据其 子节点 计算过了,直接返回 int len=g[u].size(); for(int i=0; i maxCost) maxCost=dp[i]; g[i].clear(); } printf("%d\n", maxCost); } return 0;}
转载地址:http://rhuoo.baihongyu.com/