【动态规划DP,二维动归】poj1651,Multiplication Puzzle
来源:互联网 发布:ck one 知乎 编辑:程序博客网 时间:2024/06/05 12:04
http://poj.org/problem?id=1651
有N张写有数字的卡片排成一行,按一定次序从中拿走N-2张(第1张和最后一张不能拿),每次只拿一张,取走一张卡片的同时,会得到一个分数,分值的计算方法是:要拿的卡片,和它左右两边的卡片,这三张卡片上数字的乘积。按不同的顺序取走N-2张卡片,得到的总分可能不相同,求出给定一组卡片按上述规则拿取的最小得分。
思路,对于i,j之间的任意一个k都可能是最后一个拿走的,所以:
opt(i, j) = opt(i, k) + opt(k, j) + a[i]*a[k]*a[j], k belongs to (i, j)。
大区间以来小区间,所以从 l=3一次开始动归。
# include<iostream># include<string.h>using namespace std;# define N 103# define INF_MAX 10000000int a[N],state[N][N];int main(){int i,j,k,l,n;cin>>n;for(i=1;i<=n;i++){cin>>a[i];}memset(state,0,sizeof(state));for(i=1;i<=n-2;i++){state[i][i+2]=a[i]*a[i+1]*a[i+2];}for(l=3;l<=n-1;l++)// for each length{for(i=1;i<=n-l;i++){j=i+l;state[i][j]=INF_MAX;for(k=i+1;k<=j-1;k++){state[i][j]= state[i][j]<state[i][k]+state[k][j]+a[i]*a[k]*a[j]? state[i][j]:state[i][k]+state[k][j]+a[i]*a[k]*a[j];}}}cout<<state[1][n]<<endl;return 0;}
1 0
- 【动态规划DP,二维动归】poj1651,Multiplication Puzzle
- POJ1651:Multiplication Puzzle(区间DP)
- poj1651 Multiplication Puzzle 区间dp
- POJ1651-Multiplication Puzzle-区间DP
- POJ1651:Multiplication Puzzle(区间DP)
- POJ1651 Multiplication Puzzle 区间DP
- poj1651 Multiplication Puzzle(区间dp)
- poj1651 Multiplication Puzzle 【区间dp】
- poj1651 Multiplication Puzzle--区间dp
- poj1651 Multiplication Puzzle(区间dp)
- 【动态规划DP,二维动归】poj1080,Human Gene Functions
- POJ1651:Multiplication Puzzle(简单dp)题解
- poj1651 Multiplication Puzzle(区间DP)
- poj1651 Multiplication Puzzle(区间DP)
- POJ1651:Multiplication Puzzle(区间dp)
- POJ1651 Multiplication Puzzle(DP矩阵链)
- Multiplication Puzzle (区间dp) poj1651
- Multiplication Puzzle--动态规划
- avocwozkgwbrnak
- FAST RCNN安装配置精华
- oracle创建和维护表
- 使用java api操作Hadoop文件
- Memcached简介
- 【动态规划DP,二维动归】poj1651,Multiplication Puzzle
- iOS 第四课 倒计时 设置文本框的删除键
- OC数字和集对象【官方文档】
- Hibernate学习笔记(二) — 探索 hibernate 中对象的状态
- Java之正则表达式【实例解析】
- poj 1274 最大流或二分图,匈牙利算法
- oled屏幕
- Postgis常用函数
- python: 怎样写一个函数把名字大写并变成下面这样——字典与三引号