E75【模板】树上背包 P2015 二叉苹果树
视频链接:E75【模板】树上背包 P2015 二叉苹果树_哔哩哔哩_bilibili
E18【模板】树上背包 P2014 [CTSC1997] 选课 - 董晓 - 博客园
P2015 二叉苹果树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
// 树上背包 O(n*m) #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define N 105 int head[N],idx; struct E{int to,w,ne;}e[N<<1]; void add(int x,int y,int z){ e[++idx]={y,z,head[x]};head[x]=idx; } int n,m,f[N][N],siz[N]; void dfs(int u,int fa){ for(int i=head[u];i;i=e[i].ne){ int v=e[i].to; if(v==fa)continue; dfs(v,u); siz[u]+=siz[v]+1; for(int j=min(m,siz[u]);j;--j) //边数 for(int k=min(j-1,siz[v]);k>=0;--k) //决策 f[u][j]=max(f[u][j],f[u][j-k-1]+f[v][k]+e[i].w); } } int main(){ scanf("%d%d",&n,&m); for(int i=1,u,v,w;i<n;++i) scanf("%d%d%d",&u,&v,&w), add(u,v,w),add(v,u,w); dfs(1,0); printf("%d\n",f[1][m]); }
// 树上背包 O(n*m) #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define N 105 int head[N],idx; struct E{int to,w,ne;}e[N<<1]; void add(int x,int y,int z){ e[++idx]={y,z,head[x]};head[x]=idx; } int n,m,ans,f[N][N],siz[N]; void dfs(int x,int fa){ for(int i=head[x];i;i=e[i].ne){ int y=e[i].to; if(y==fa) continue; for(int j=0;j<=m-1;j++) f[y][j]=f[x][j]+e[i].w; dfs(y,x); for(int j=1;j<=m;j++) f[x][j]=max(f[x][j],f[y][j-1]); } } int main(){ scanf("%d%d",&n,&m); for(int i=1,x,y,w;i<n;++i){ scanf("%d%d%d",&x,&y,&w), add(x,y,w),add(y,x,w); } dfs(1,0); printf("%d\n",f[1][m]); }
分类:
E 动态规划
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-11-02 C58 可持久化线段树+差分 P3168 [CQOI2015] 任务查询系统