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

怎样查看一个网站是用什么开源程序做的权威的南昌网站建设

怎样查看一个网站是用什么开源程序做的,权威的南昌网站建设,好看的网站后台界面,双语网站建设公司文章目录 树形DP讲解一、引言二、树形DP基础1、树的定义2、树形DP的基本思想3、代码示例:子树大小 三、经典例题解析1、树的平衡点1.1、代码示例 2、没有上司的舞会(树的最大独立集)2.1、代码示例 四、总结 树形DP讲解 一、引言 树形动态规…

文章目录

  • 树形DP讲解
    • 一、引言
    • 二、树形DP基础
      • 1、树的定义
      • 2、树形DP的基本思想
      • 3、代码示例:子树大小
    • 三、经典例题解析
      • 1、树的平衡点
        • 1.1、代码示例
      • 2、没有上司的舞会(树的最大独立集)
        • 2.1、代码示例
    • 四、总结

树形DP讲解

一、引言

树形动态规划(Tree DP)是动态规划中的一种特殊形式,它专门用于解决与树结构相关的问题。树形DP的核心思想是利用树的分形结构,递归地定义和解决问题。在这篇文章中,我们将深入探讨树形DP的基本概念、经典例题以及实际应用。

二、树形DP基础

1、树的定义

在图论中,树被定义为一个连通且无圈的图。树的分形结构意味着树的每个子树也是一棵完整的树,这使得树形DP天然适合递归求解。

2、树形DP的基本思想

树形DP通常遵循“先子树后合并”的原则,这与树的后序遍历相似。我们先递归访问所有子树,然后在根节点上合并结果。

3、代码示例:子树大小

void dfs(int u) {if (u 是叶子) {f[u] = 1;return;}for (int v : e[u]) {dfs(v);f[u] += f[v];}f[u] += 1; // 本身
}

这段代码通过深度优先搜索(DFS)计算以每个节点为根的子树大小。

三、经典例题解析

1、树的平衡点

平衡点是指删除树中的某个节点后,使得剩下的连通块中最大的连通块大小最小。我们可以通过计算每个节点的子树大小来找到平衡点。

1.1、代码示例
import java.util.ArrayList;
import java.util.List;public class Main {static final int N = 100010; // 假设N是图的最大节点数static List<Integer>[] e = new ArrayList[N];static int ans, idx, f[] = new int[N];public static void main(String[] args) {// 初始化邻接表for (int i = 0; i < N; i++) {e[i] = new ArrayList<>();}// 示例调用int root = 1; // 假设1是树的根节点int fa = 0; // 根节点没有父节点dfs(root, fa);System.out.println("最大值: " + ans + ", 节点: " + idx);}static void dfs(int u, int fa) {f[u] = 1;int mx = 0;for (int v : e[u]) {if (v == fa) continue;dfs(v, u);f[u] += f[v];mx = Math.max(mx, f[v]);}mx = Math.max(mx, n - f[u]);if (ans < mx) {ans = mx;idx = u;}}// 假设n是节点总数static int n = 10; // 这里需要根据实际情况设置
}

2、没有上司的舞会(树的最大独立集)

在这个问题中,我们需要找到树的最大权值独立集,即没有直接上司和下属关系的节点集合。

2.1、代码示例
import java.util.ArrayList;
import java.util.Scanner;public class Main {static final int N = 10000 + 10;static ArrayList<Integer>[] tr = new ArrayList[N];static int[][] f = new int[N][2];static int[] v = new int[N];static int[] Happy = new int[N];static int n;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 初始化邻接表for (int i = 0; i < N; i++) {tr[i] = new ArrayList<>();}n = scanner.nextInt();for (int i = 1; i <= n; ++i) {Happy[i] = scanner.nextInt();}for (int i = 1; i < n; ++i) {int x = scanner.nextInt();int y = scanner.nextInt();tr[y].add(x);}int root = 0;for (int i = 1; i <= n; ++i) {if (v[i] == 0) {root = i;break;}}dfs(root);System.out.println(Math.max(f[root][0], f[root][1]));}static void dfs(int u) {f[u][0] = 0;f[u][1] = Happy[u];for (int v : tr[u]) {dfs(v);f[u][0] += Math.max(f[v][0], f[v][1]);f[u][1] += f[v][0];}}
}

四、总结

树形DP是一种强大的算法工具,它通过利用树的结构特性来解决复杂的优化问题。通过本文的介绍和代码示例,我们可以看到树形DP在解决树相关问题时的效率和优雅。掌握树形DP不仅能够提升算法设计能力,还能在实际问题中找到创新的解决方案。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • 【动态规划】树形DP完全详解! - RioTian - 博客园
http://www.yayakq.cn/news/577763/

相关文章:

  • 10大免费软件下载网站推荐网站建设和网页建设的区别
  • 网站正在建设中动画2008 iis配置网站
  • 深圳宝安商城网站建设公司金昌网站建设
  • 维修网站怎么做做网站到底怎么赚钱
  • 青海网站设计企业wordpress安装的模板文件在哪
  • 江西做网站的手机网站方案.doc
  • 汕头网站优化哪家好西安做网站微信公司哪家好
  • 什么行业要做网站建设推广这些洛阳自助建站
  • 连云港市建设银行网站哈尔滨服务最好的网站优化公司
  • 镇江网站建设工程三台县城乡建设网网站
  • 网站建设投诉去哪里投诉莆田网站开发公司
  • 黑科技引流推广神器免费seo优化关键词0
  • wordpress网站克隆上海公司注册地址有什么要求
  • 欧美网站特点安徽公共资源交易中心招标网
  • 临沂中小企业网站制作手机网站如何做才能兼容性各种手机
  • 勤哲网站开发视频wordpress文章展示模板
  • 百度网站快速排名公司网站建设搜索代码
  • 建设银行招标网站网站可以更更换空间吗
  • 互联网站备案登记表做网站公司找意向客户
  • 网站建设课程的感想临汾推广型网站开发
  • 有什么做设计的兼职网站如何推广品牌
  • 南京网站设计公司排名wordpress新建分类目录
  • 宁波优化网站厂家华为网站的建设建议
  • 网站优化吧商洛网络推广公司
  • 网站底部备案号个人微网站怎么做
  • 一个服务器可以备案几个网站吗厦门设计师网站
  • 企业网站域名备案流程网站介绍模板
  • 做网站和做电脑软件差别大吗东莞关键词优化效果
  • 企业网站建设课程体会做服装搭配图的网站有哪些
  • 全国建设部网站放置文件