hdu3516 Tree Construction (四边形不等式)
2024-08-30 17:42:21
题意:给定一些点(xi,yi)(xj,yj)满足:i<j,xi<xj,yi>yj。用下面的连起来,使得所有边的长度最小?
题解:直接给出吧
f[i][j]=min(f[i][k]+f[k+1][j]+cost(i,j)
cost(i,j)=a[k].y-a[j].y+a[k+1].x-a[i].x;
明显了吧
证明一下,搞一搞,四边形性质就出来了,模板题吧。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#define N 1007
#define M 500007
#define inf 2000000009
using namespace std; int n;
int f[N][N],s[N][N];
struct Node{int x,y;}a[M]; int cost(int i,int j,int k)
{
if (k>=j) return inf;
return a[k].y-a[j].y+a[k+].x-a[i].x;
}
int main()
{
while (~scanf("%d",&n))
{
for (int i=;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
for (int i=;i<=n;i++)
s[i][i]=i;
memset(f,,sizeof f);
for (int L=;L<=n;L++)
for (int i=;i+L-<=n;i++)
{
int j=L+i-;f[i][j]=inf;
for (int k=s[i][j-];k<=s[i+][j];k++)
{
int tmp=f[i][k]+f[k+][j]+cost(i,j,k);
if (tmp<f[i][j]) f[i][j]=tmp,s[i][j]=k;
}
}
printf("%d\n",f[][n]);
}
}
最新文章
- webpack配置别名alias出现的错误匹配
- SQL服务器在执行这条语句时会先进行运算然后执行
- SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示
- Architectural Model - SNMP Tutorial
- js拖动层原形版
- ireport开发报表,Java和JSP端如何集成
- Mysql 数据库文件存储在哪个目录
- 破解之寻找OEP[手动脱壳](2)
- java集合简介
- C陷阱与缺陷代码分析之第1章词法陷阱
- Appium Android Bootstrap源码分析之简介
- 在windows搭建react-native android 开发环境总结
- Potato(邪恶土豆)–windows全版本猥琐提权
- Undefined symbols for architecture arm64: ";_OBJC_CLASS_$_WKWebView";, referenced from: objc-c
- ACCA AI来袭会议笔记
- js-将文本复制到剪切板
- C# 合并只要有交集的所有集合
- Spring MVC 源码分析
- Redis淘汰删除策略
- JAVA开发常用计算机命令