首页 > 其他分享 >【做题笔记】动态规划专题(DP)

【做题笔记】动态规划专题(DP)

时间:2023-01-11 13:12:19浏览次数:51  
标签:ch int 笔记 子树 专题 DP 节点 dp getchar

这里记录笔者这几天做的有关于 dp 的题目。

树形 dp

#1 P1122 最大子树和

题目链接:https://www.luogu.com.cn/problem/P1122

题意:选出一个联通分量,使得联通分量的点的点权和最大。

思路:考虑以 \(f_i\) 表示以点 \(i\) 为根节点子树联通分量权值的最大值。

于是初始化有 \(f_i=a_i\),因为他的子树不管断掉几个一定包含自己。

如果不是叶子节点,考虑如果它儿子(设为 \(j\))的 \(f_j>0\),则这个节点一定对 \(f_i\) 有贡献,加上它的子树会使得答案值更大,否则不选。

于是就有了递推方程:

\[f_i=\sum_{j \in \text{son}(i)} f_j \qquad \text{If } f_j>0 \]

code

#include<bits/stdc++.h>
using namespace std;

const int N = 2e4 + 5;

inline int read() {
	int x(0),f(0);
	char ch=getchar();
	for(; !isdigit(ch); ch=getchar()) f|=(ch=='-');
	for(;  isdigit(ch); ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
	return f?-x:x;
}

int val[N],dp[N];
int n,m,ans=numeric_limits<int>::min();

struct graph {
	int to,nxt;
} G[N<<1];
int cnt,head[N];
void addEdge(int u,int v) {
	G[++cnt]= {v,head[u]};
	head[u]=cnt;
}

void dfs(int x,int fa) {
	dp[x]=val[x];
	for(int i=head[x]; i; i=G[i].nxt) {
		int t=G[i].to;
		if(t==fa) continue;
		dfs(t,x);
		if(dp[t]>0)
			dp[x]+=dp[t];
	}
}

int main() {
	n=read();
	for(int i=1; i<=n; i++) val[i]=read();
	for(int i=1; i<n; i++) {
		int u,v;
		u=read(), v=read();
		addEdge(u,v);
		addEdge(v,u);
	}
	dfs(1,-1);
	for(int i=1; i<=n; i++)
		ans=max(ans,dp[i]);
	printf("%d\n",ans);
}

标签:ch,int,笔记,子树,专题,DP,节点,dp,getchar
From: https://www.cnblogs.com/TheSky233/p/17043410.html

相关文章

  • 【SpringBoot实战专题】「开发实战系列」从零开始教你舒服的使用RedisTemplate操作Red
    SpringBoot快速操作Redis数据在SpringBoot框架中提供了spring-boot-starter-data-redis的依赖组件进行操作Redis服务,当引入了该组件之后,只需要配置Redis的配置即可进行链接R......
  • 基于单调性的 dp 优化
    决策单调性决策单调性一般用于最优性问题当中,即一个状态只能从一个最优的状态转移,该最优状态称之为最优点。决策单调性就是指最优点随dp转移单调移动。一般如果能够将......
  • 笔记
    一、Linuxvim编辑器y复制w选择单词p粘贴noh取消高亮模式setnu显示行号/单词查找单词(n下一个N上一个)%s/old单词/new单词/g替换全部单词系统管......
  • Docker学习笔记:login、logout登录登出
    一、login登录dockerlogin登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库DockerHub。#语法dockerlogin[OPTIONS][SERVER]Options:-p,-......
  • 读编程与类型系统笔记04_类型安全
    1. 避免基本类型偏执1.1. 把值声明为基本类型,并对其意义做一些隐含的假定时1.1.1. 例如:使用number表示邮编1.1.2. 例如:使用string表示电话号码1.2. 定义类型来显......
  • 机器学习 吴恩达 第五章 笔记
    五、逻辑回归(LogisticRegression)5.1分类问题  在接下来的几节里,我想讨论要预测的变量\(y\)是一个离散值的分类问题.接下来就是讨论逻辑回归算法.  在分类问题......
  • 进阶阶段——STM32学习笔记(一)
    进阶阶段——STM32学习笔记(1)前言由于套件放在学校,待等假期结束后才能做实验0STM32简介注意:STM32的标准工作电压为3.3V,若用5V供电,需要用(电平转换电路)稳压芯片降压至3.3......
  • 笔记本s3睡眠
    windows+s–》输入regedit–》找到HKLM/System/CurrentControlSet/Control/Power–>将PlatformAoAcOverride设置为0如果没有PlatformAoAcOverride,windows+s搜索cmd.exe,以......
  • 论文笔记:Symbolic Execution for Software Testing: Three Decades Later
    论文笔记:SymbolicExecutionforSoftwareTesting:ThreeDecadesLater这是一篇综述性质的文章,介绍了符号执行相关技术。1.Introduction2.OverviewofClassicalSy......
  • CSAPP MallocLab 笔记
    CSAPPMallocLab笔记CS15-213labnotessbrk函数为了实现动态的内存分配,一个核心的函数就是sbrk。memoryalignment8字节对齐的地址特征,其地址数值的16进制表......