区间动规——凸多边形的三角划分
2016-01-28 10:26
363 查看
给定一具有N个顶点(按顺时针方向1到N编号)的凸多边形,每个顶点的权均已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小?
f[i][j]表示从编号i到j(顺时针)这一段连续顶点划分后的最小权重;那么求解的问题变成了f[1]
代码如下:
#include<iostream>
#include<cstdio>
long long w[55],f[55][55];
int main(){
long long n,i,x,k,j;
scanf("%I64d",&n);
for(i=1;i<=n;i++)scanf("%I64d",&w[i]);
for(x=2;x<n;x++) //连续顶点数
for(i=1;i<=n-x;i++){ //从第i个顶点开始
j=i+x;
f[i][j]=999999999999999999LL;//初值要足够大
for(k=i+1;k<j;k++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]+w[i]*w[k]*w[j]);
}
printf("%I64d",f[1]
);
}
nkoj1463
类似的 nkoj 2305 切蛋糕
f[i][j]表示从编号i到j(顺时针)这一段连续顶点划分后的最小权重;那么求解的问题变成了f[1]
代码如下:
#include<iostream>
#include<cstdio>
long long w[55],f[55][55];
int main(){
long long n,i,x,k,j;
scanf("%I64d",&n);
for(i=1;i<=n;i++)scanf("%I64d",&w[i]);
for(x=2;x<n;x++) //连续顶点数
for(i=1;i<=n-x;i++){ //从第i个顶点开始
j=i+x;
f[i][j]=999999999999999999LL;//初值要足够大
for(k=i+1;k<j;k++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]+w[i]*w[k]*w[j]);
}
printf("%I64d",f[1]
);
}
nkoj1463
类似的 nkoj 2305 切蛋糕
相关文章推荐
- 使用JQuery,但不使用JQuery validate 来验证表单非空情况
- Servlet处理客户端HTTP请求
- Android使用HttpClient实现文件上传到PHP服务器,并监控进度条
- Android 扩展OkHttp支持请求优先级调度
- 垂直居中,水平居中html例子
- The process of container handles the servlet request
- 【HDOJ】2242 考研路茫茫——空调教室
- 设计模式之禅之设计模式-状态模式
- MySQL日期时间函数大全
- jaas jca jsse
- window.showdialog完全手册,解决模态窗口,传值和返回值问题
- iOS自动布局
- SQL 获取当前日期,年、月、日、周、时、分、秒
- HTML中select选择菜单跳转“当前窗口”或“新窗口”
- Allegro 出焊接坐标文件最新
- Windows XP用户帐户权限设置详解
- php 中改变字符编码的函数 是 iconv()
- Docker SSH
- TCP长连接与短连接的区别
- 鸟哥服务器架设——NTP服务器搭建