E59 四边形不等式优化DP Optimal Binary Search Tree
视频链接:474 四边形不等式优化DP Optimal Binary Search Tree_哔哩哔哩_bilibili
UVA10304 Optimal Binary Search Tree
Luogu UVA10304 Optimal Binary Search Tree
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=300; int n, e[N], s[N]; int f[N][N];//f[i,j]表示给区间[i,j]建排序二叉树的最小费用 int main(){ while(~scanf("%d",&n)){ for(int i=1; i<=n; i++) scanf("%d",&e[i]), s[i]=s[i-1]+e[i]; memset(f,0x3f, sizeof f); for(int i=1;i<=n;i++) f[i][i]=f[i][i-1]=f[i+1][i]=0; for(int len=2; len<=n; len++) for(int i=1,j; (j=i+len-1)<=n; i++) for(int k=i; k<=j; k++) if(f[i][j]>f[i][k-1]+f[k+1][j]+s[j]-s[i-1]-e[k]) f[i][j]=f[i][k-1]+f[k+1][j]+s[j]-s[i-1]-e[k]; printf("%d\n", f[1][n]); } }
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=300; int n,e[N],s[N]; int f[N][N];//f[i,j]表示给区间[i,j]建排序二叉树的最小费用 int p[N][N];//p[i,j]表示状态f[i,j]的最优决策点 int main(){ while(~scanf("%d",&n)){ for(int i=1; i<=n; i++) scanf("%d",&e[i]),s[i]=s[i-1]+e[i]; memset(f,0x3f,sizeof(f)); for(int i=1; i<=n; i++) f[i][i]=f[i+1][i]=f[i][i-1]=0, p[i][i]=i; for(int len=2; len<=n; len++) for(int i=1,j; (j=i+len-1)<=n; i++) for(int k=p[i][j-1]; k<=p[i+1][j]; k++) if(f[i][j]>f[i][k-1]+f[k+1][j]+s[j]-s[i-1]-e[k]) f[i][j]=f[i][k-1]+f[k+1][j]+s[j]-s[i-1]-e[k], p[i][j]=k; printf("%d\n",f[1][n]); } }
练习:
CF868F Yet Another Minimization Problem
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2022-05-28 D21 网络流 最大流 Dinic 算法
2022-05-28 D20 网络流 最大流 EK 算法
2022-05-28 D19 Tarjan vDCC 缩点
2022-05-28 D18 Tarjan eDCC 缩点
2022-05-28 D17 Tarjan 割边
2022-05-28 D16 Tarjan 割点
2022-05-28 D15 Tarjan 缩点