例题9-9 UVa10003 Cutting Sticks(DP:矩阵链乘)
来源:互联网 发布:淘宝中药材哪家好知乎 编辑:程序博客网 时间:2024/05/17 21:59
题意:
看白书
要点:
明显是类似于矩阵连乘问题,用d[i][j]标记i到j中的最优费用,从中间一点k处截成两半,可以写出状态转移方程为d[i][j] = min(d[i][j], d[i][k] + d[k][j] + pos[j] - pos[i]),不难看出这实际是一个区间DP问题,通过j-i小区间不断递增进行DP,注意这里i和j不用写成0~len,因为d[i][j]只是起到一个存储状态的作用,i和j应用来表示n个切割点的数组下标。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;int len;int pos[65],d[65][65];int main(){int i, j, k,l;while (scanf("%d", &len) && len){int n;scanf("%d", &n);for (i = 1; i <= n; i++)scanf("%d", &pos[i]);pos[0] = 0; pos[n + 1] = len;//补上两个切割点for (i = 0; i <= n + 1; i++)d[i][i] = 0;for (l = 2; l <= n+1; l++)//这里实际i和j表示切割点对应下标即可{for (i = 0; i+l <=n+1; i++){j = i + l;d[i][j] = 0xfffff;for (k = i+1; k < j; k++)d[i][j] = min(d[i][j], d[i][k] + d[k][j] + pos[j] - pos[i]);}}printf("The minimum cutting is ");printf("%d.\n", d[0][n+1]);}return 0;}
0 0
- 例题9-9 UVa10003 Cutting Sticks(DP:矩阵链乘)
- uva10003 - Cutting Sticks(区间dp)
- UVA10003 Cutting Sticks(区间 DP)
- uva10003 - Cutting Sticks(DP,区间)
- 【DP】UVA 10003 Cutting Sticks 类似矩阵链乘
- 【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)
- UVA10003---Cutting Sticks(简单区间dp)
- 矩阵链乘--uva10003
- 例题9-9 UVA 10003 Cutting Sticks 切木棍(最优三角剖分 || 区间dp )
- UVA 10003 Cutting Sticks [线性结构dp] [最优矩阵链乘]
- UVA10003 Cutting Sticks(切棍子)
- UVa10003 - Cutting Sticks
- uva10003 - Cutting Sticks
- UVA10003 - Cutting Sticks
- UVA10003 Cutting Sticks
- uva10003 Cutting Sticks
- UVa10003 cutting sticks
- uva10003 Cutting sticks
- typedef C/C++
- Oracle 数据库及Oracle SQL Developer安装注意的地方
- 导航栏隐藏跳转返回的坑
- 线段树 例六 未解决
- Ecshop修改首页精品推荐、新品上市、热卖商品的显示数量
- 例题9-9 UVa10003 Cutting Sticks(DP:矩阵链乘)
- hdu3008 Warcraft 「DP」
- 基础总结篇之四:Service完全解析
- intellij idea 2016.1激活码
- java Socket实现简单在线聊天(三)
- C/C++,java 数据结构---线性链表存储数据:获取数据慢,增删快
- asList的缺陷
- 我的学习之路-JAVA-04
- java类加载顺序