区间DP--凸多边形三角剖分
给定一个具有N(N<50)个顶点(从1到N编号)的凸多边形,每个顶点的权均已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小?
输入文件:第一行 顶点数N
第二行 N个顶点(从1到N)的权值
输出格式:最小的和的值
样例:5
1 2 3 4 5
输出:38
- /*没找到交的OJ网站,就自己造了几组数据试了一下
- 区间型DP的转移方程:一般涉及区间的起点和延伸的长度
- f[i][j]表示从i开始j长度的区间分割三角形的最小乘积和,把端点i,i+j-1可以与区间内任意一个不与i,i+j-1相邻的点组成三角形,所以枚举中间点k即可*/
- #include<iostream>
- using namespace std;
- #include<cstdio>
- #include<cstring>
- #define N 120
- #define MAX (1<<31)-1
- long long a[N];
- long long f[N][N];
- int n;
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;++i)
- {
- scanf("%d",&a[i]);
- a[i+n]=a[i];/*把这条多边形变成两倍的链条*/
- }
- memset(f,,sizeof(f));
- for(int i=;i<=*n-;++i)
- f[i][]=a[i]*a[i+]*a[i+];/*初始化*/
- for(int j=;j<=n;++j)
- for(int i=;i+j<=*n+;++i)
- for(int k=i+;i+j-k>=;++k)/*枚举k*/
- f[i][j]=min(f[i][j],f[i][k-i+]+f[k][i+j-k]+a[i]*a[k]*a[i+j-]);
- long long ans=MAX;
- for(int i=;i<=n;++i)/*注意最后把所有点作为区间端点长度为n的情况都枚举,找出最小值*/
- ans=min(ans,f[i][n]);
- cout<<ans<<endl;
- return ;
- }
区间DP--凸多边形三角剖分的更多相关文章
- UVA-1331 Minimax Triangulation 区间dp 计算几何 三角剖分 最大三角形最小化
题目链接:https://cn.vjudge.net/problem/UVA-1331 题意 给一个任意多边形,把它分为多个三角形. 求某方案中最大的三角形是各方案中最小的面积的三角形面积. 思路 学 ...
- Uva 1331 - Minimax Triangulation(最优三角剖分 区间DP)
题目大意:依照顺时针或者逆时针的顺序给出多边的点,要将这个多边形分解成n-2个三角形,要求使得这些三角行中面积最大的三角形面积尽量小,求最小值. 思路:用区间DP能够非常方便解决,多边形可能是凹边形, ...
- 动态规划——区间dp
在利用动态规划解决的一些实际问题当中,一类是基于区间上进行的,总的来说,这种区间dp是属于线性dp的一种.但是我们为了更好的分类,这里仍将其单独拿出进行分析讨论. 让我们结合一个题目开始对区间dp的探 ...
- 区间DP(超详细!!!)
一.问题 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起,求最少消几次能消完整个序列,n≤500. f[i][j]表示消去区间[i,j]需要的最少次数. 则; 若a ...
- 区间DP小结
也写了好几天的区间DP了,这里稍微总结一下(感觉还是不怎么会啊!). 但是多多少少也有了点感悟: 一.在有了一点思路之后,一定要先确定好dp数组的含义,不要模糊不清地就去写状态转移方程. 二.还么想好 ...
- ZOJ 3537 Cake(凸包+区间DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3537 题目大意:给出一些点表示多边形顶点的位置,如果不是凸多边形 ...
- ZOJ 3537 Cake 求凸包 区间DP
题意:给出一些点表示多边形顶点的位置(如果多边形是凹多边形就不能切),切多边形时每次只能在顶点和顶点间切,每切一次都有相应的代价.现在已经给出计算代价的公式,问把多边形切成最多个不相交三角形的最小代价 ...
- 区间DP 青蛙的烦恼
池塘中有n片荷叶恰好围成了一个凸多边形,有一只小青蛙恰好站在1号荷叶上,小青蛙想通过最短的路程遍历所有的荷叶(经过一个荷叶一次且仅一次),小青蛙可以从一片荷叶上跳到另外任意一片荷叶上. 输入数据(fr ...
- 区间DP 等腰三角形
题目描述:给定一个正N边形,可以通过连线将这个多边形分割成N-2个三角形,问这N-2个三角形中恰有k个等腰三角形的分割方法有多少?这个值可能很大,输出对9397取模的结果.数据范围:n,k <= ...
- 动态规划 之 区间DP练习
前言 \(Loj\) 放上了那么多<信息学奥赛一本通>上的题(虽然我并没有这本书),我要给它点一个大大的赞 ^_^ 以后分类刷题不愁啦! 正文 那就一道道说吧. 石子合并 将 \(n\) ...
随机推荐
- frameset测试
frame不能放在body标签内.指定name属性,为这一个框架指定名字,在html的a的target属性可以设为target="right"在该框架显示跳转的页面.(常用于后台管 ...
- 首次成功的web渗透
web渗透 今天给大家讲一个最近做的一件令我振奋的一件事情 渗透培训刚刚结束的第二天 我在公网上挖到了我人生中的第一个站 总体来说个人真的很振奋人心 这个网站还没有进行更改但我已经通知了他们 ...
- selenium grid结构图
调用 Selenium-Grid 的基本结构图如下: 上面是使用 selenium-grid 的一种普通方式,仅仅使用了其支持的分布式执行的功能,即当你同时需 要测试用例比较多时,可以平行的执行这些用 ...
- python 内置函数eval()、exec()、compile()
eval 函数的作用: 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式,而不是复杂的代码逻辑. eval(source, globals=None, locals=Non ...
- 为什么需要学UML建模
今天在看<设计模式>的时候,看到了许多的UML模型图,案例中作者用极少的代码却能讲清楚讲好设计模式的背景和思想,抽象成一张张的UML图就能很好的review和复盘,这对于在工作中习惯用代码 ...
- Java学习(一)Scanner报错java.util.NoSuchElementException
我在一个方法A中使用了Scanner的 Scanner input=new Scanner(System.in),随后又将其关闭了,因为Eclipse里面你若不关闭,他会有一个warning:Reso ...
- MYSQL-----控制流程函数(case when...then..else..end)
MySQL有一些内置的控制流程函数,可以在SQL语句中使用这些函数来更加准确和直接的结果. 第一种语法: case when [value] then result ................. ...
- 取消cp确认
使用cp -r -f 强制覆盖拷贝命令时,每一个文件都需要认为的键入“Y”进行确认 可以通过取消同名cp的定义,命令如下unalias cp
- Js添加、读取、删除cookie,判断cookie是否有效,指定domain域下主路径path下设置cookie,设置expires过期时间
有时我们需要用cookie保存用户名,记录登录状态,如何正确判断该机用户cookie是否存在呢?不能简单使用a!=”这样的写法. 正确方法是:判断是否存在名为username3的cookie,使用do ...
- 当参数为带参数的url时怎么办?
比如地址为:http://www.baidu.com/index.aspx?url=http://www.baidu.com/info.aspx?id=1&type=1,用Request[&q ...