E80 树上背包 P3354 [IOI2005] Riv 河流
视频链接:E80 树上背包 P3354 [IOI2005] Riv 河流_哔哩哔哩_bilibili
P3354 [IOI2005] Riv 河流 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
// 树上背包 O(n*n*m*m) #include <iostream> #include <cstring> #include <algorithm> #include <vector> #define N 105 using namespace std; int read(){ int d=0;char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch)){d=d*10+ch-48;ch=getchar();} return d; } vector<int> e[N],stk; int n,m,w[N],a[N],d[N]; int f[N][N][N],g[N][N][N]; void dfs(int u){ stk.push_back(u); for(int v:e[u]){ d[v]=d[u]+a[v]; dfs(v); for(int i:stk){ for(int j=m;j>=0;--j){ f[u][i][j]+=f[v][i][0]; g[u][i][j]+=f[v][u][0]; for(int k=0;k<=j;++k){ f[u][i][j]=min(f[u][i][j],f[u][i][j-k]+f[v][i][k]); g[u][i][j]=min(g[u][i][j],g[u][i][j-k]+f[v][u][k]); } } } } for(int i:stk){ for(int j=m;j>=1;--j) f[u][i][j]=min(f[u][i][j]+w[u]*(d[u]-d[i]),g[u][i][j-1]); f[u][i][0]+=w[u]*(d[u]-d[i]); } stk.pop_back(); } int main(){ n=read(),m=read(); //村庄数,伐木场 for(int i=1,x;i<=n;++i){ w[i]=read(),x=read(),a[i]=read(); e[x].push_back(i); } dfs(0); printf("%d",f[0][0][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-08 C61 可持久化线段树+递推 P3963 [TJOI2013] 奖学金