当前位置: 首页 > news >正文

做外贸都得有网站吗绵阳网站建设制作

做外贸都得有网站吗,绵阳网站建设制作,平台开发网站建设公司官网,wordpress出现没有权限登录目录 树状动态规划概述 示例 求解思路 树状动态规划概述 树状动态规划#xff08;Tree DP#xff09;是一种在树结构上进行动态规划的方法。在树状DP中#xff0c;我们利用树的特殊结构性质#xff0c;通过递归地向下更新子节点的状态#xff0c;最终得到整个树的最…目录 树状动态规划概述 示例  求解思路  树状动态规划概述 树状动态规划Tree DP是一种在树结构上进行动态规划的方法。在树状DP中我们利用树的特殊结构性质通过递归地向下更新子节点的状态最终得到整个树的最优解或其他需要的信息。 树状DP通常包含以下步骤 定义状态根据问题的要求定义每个节点的状态。这可以是一个数值、一个数组、一个结构体等取决于问题的具体情况。设计转移方程根据问题的要求确定每个节点的状态如何从其子节点的状态转移而来。这通常通过遍历节点的子节点并利用子节点的状态来更新当前节点的状态来实现。确定初始状态确定叶节点的初始状态这是递归的终止条件。递归地进行状态转移从树的顶部开始递归地向下进行状态转移直到所有节点的状态都被计算出来。 示例  问题描述 给定一棵有根树每个节点有两个属性权重和价值。节点的权重表示该节点所需要的空间节点的价值表示该节点的价值。现在有一个给定的背包容量要求选择一些节点放入背包中使得总权重不超过背包容量同时总价值最大。 输入 一棵树的节点数每个节点的权重和价值背包容量 输出 最大的总价值 求解思路  这个例子是一个经典的背包问题在树结构中的应用。我们需要在给定的一棵有根树中选择一些节点放入背包中使得总权重不超过背包容量同时总价值最大。 为了解决这个问题我们可以使用动态规划的方法。具体思路如下 定义状态我们定义dp[i][j]表示以节点i为根节点的子树中在背包容量为j的情况下可以获得的最大总价值。 状态转移方程对于节点i的每个孩子节点child我们需要考虑两种情况 不选择child节点此时dp[i][j]不变。选择child节点此时需要从剩余容量j减去child节点的权重即j - tree[child].weight并从子问题dp[child][j - tree[child].weight]中得到最大价值再加上child节点的价值tree[child].value。整体来看选择child节点后的最大总价值为dp[child][j - tree[child].weight] tree[child].value。综合考虑上述两种情况我们可以得到状态转移方程 dp[i][j] max(dp[i][j], dp[child][j - tree[child].weight] tree[child].value) 其中child为节点i的孩子节点。 初始化我们将dp数组初始化为0表示初始时没有选择任何节点。 从根节点开始进行深度优先搜索DFS按照上述状态转移方程更新dp数组中的值。最终dp[1][背包容量]即为所求的最大总价值。 下面是代码中主要部分的解释 void dfs(int node) {for (int child : tree[node].children) {// 对每个孩子节点进行深度优先搜索dfs(child);// 更新dp数组for (int i dp[node].size() - 1; i tree[node].weight; i--) {dp[node][i] max(dp[node][i], dp[child][i - tree[node].weight] tree[child].value);}} }在dfs函数中我们首先对当前节点的每个孩子节点进行深度优先搜索。然后通过一个循环从dp[node]的最后一个元素开始向前更新dp[node]的值。这里使用了倒序循环的方式是因为我们需要保证在更新dp[node][i]时dp[child][i - tree[node].weight]已经被计算过即在dp[node]的前面位置。同时我们需要确保总权重不超过背包容量所以我们从tree[node].weight开始遍历。 最后在主函数中我们输入节点数和每个节点的权重、价值信息构建树结构并调用dfs函数进行求解。最终结果存储在dp[1][背包容量]中。 希望以上详细解释能够帮助你理解这个树状动态规划问题的解决方法。如有任何疑问请随时提出。 示例 输入 节点数 5 节点 1: 权重 2, 价值 3 节点 2: 权重 1, 价值 2 节点 3: 权重 3, 价值 4 节点 4: 权重 2, 价值 2 节点 5: 权重 1, 价值 1 背包容量 5输出 最大总价值 9C代码实现 #include iostream #include vector using namespace std;struct Node {int weight;int value;vectorint children; };vectorNode tree; // 存储树节点的信息 vectorvectorint dp; // 存储动态规划的结果void dfs(int node) {for (int child : tree[node].children) {dfs(child);for (int i dp[node].size() - 1; i tree[node].weight; i--) {dp[node][i] max(dp[node][i], dp[child][i - tree[node].weight] tree[child].value);}} }int main() {int n; // 节点数cin n;tree.resize(n 1); // 从编号1开始存储节点信息dp.resize(n 1, vectorint(n 1, 0)); // 初始化动规数组for (int i 1; i n; i) {cin tree[i].weight tree[i].value;}// 构建树结构for (int i 2; i n; i) {int parent;cin parent;tree[parent].children.push_back(i);}dfs(1); // 从根节点开始进行深度优先搜索cout 最大总价值 dp[1][n] endl;return 0; }这段代码首先通过输入构建了一棵树并使用动态规划方法计算了最大总价值。其中dfs函数进行了深度优先搜索和动态规划的计算dp数组用于存储动态规划的结果。
http://www.w-s-a.com/news/944145/

相关文章:

  • 功能性的网站建设北京餐饮品牌设计公司
  • php做网站优势视频直播软件
  • 怎么安装php网站哪个网站是专门为建设方服务的
  • 重慶网站开发sina app engine wordpress
  • wampserver网站开发步骤中冠工程管理咨询有限公司
  • 自己做网站商城需要营业执照吗老外做牛排的视频网站
  • 网站推广效果的评估指标主要包括公司广告推广
  • 昆明网站建设那家好哪个网站学做凉皮
  • hype做网站动效哪里有给网站做
  • 打扑克网站推广软件设计类专业哪个最好
  • 网站设计首页网站建设意向书
  • 做网站要学那些angularjs后台管理系统网站
  • 广州白云手机网站建设学做点心上哪个网站
  • 哈尔滨网站建设步骤百度青岛代理公司
  • 怎么利用代码做网站军队 网站备案
  • 百度手机版网址免费广州seo
  • 军博做网站公司wordpress评论插件
  • 如何申请一个网站 做视频网站报错解析
  • 徐州高端网站建设无锡找做网站
  • 网站如何不需要备案百度的宣传视频广告
  • 如何用易语言做网站采购系统有哪些
  • 建一个网站容易吗浙江省城乡建设厅官网
  • 奇点网站建设黄骅贴吧百度贴吧
  • 站长爱it如何分析网站设计
  • 服装公司网站定位seo网站关键词
  • 电商网站开发流程文档南京 seo 价格
  • 网站建设任务分解张家港网站制作服务
  • 化州+网站建设网络营销怎么做推广
  • 贵阳网站设计方案阿里云 wordpress 数据库
  • 如何做购物返佣金网站高校 网站建设实施方案