poj 1651 Multiplication Puzzle(区间DP,直接用矩阵相乘的方式也对)
来源:互联网 发布:linux内核源代码分析 编辑:程序博客网 时间:2024/06/04 19:20
1、http://poj.org/problem?id=1651
2、题目大意:
给出n个数,现在要将这些数一个一个的取出来,但是不能取出两个端点的数字,取出第i个数字(c[i])的代价是
c[i-1]*c[i]*c[i+1]
用矩阵相乘的思想dp[i][j]表示i到j区间取出来的代价
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+c[i]*c[k]*c[j])
3、AC代码:
#include<stdio.h>#include<algorithm>using namespace std;#define N 105#define INF 0x7ffffffint c[N];int dp[N][N];int main(){ int n,tmp; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&c[i]); for(int i=1;i<=n;i++) dp[i][i]=0; for(int i=2;i<=n;i++) { for(int j=1;j+i<=n;j++) { dp[j][j+i]=INF; for(int k=j;k<i+j;k++) { dp[j][j+i]=min(dp[j][j+i],dp[j][k]+dp[k][j+i]+c[j]*c[k]*c[j+i]); } } } printf("%d\n",dp[1][n]); } return 0;}/*510 1 50 20 5*/
0 0
- poj 1651 Multiplication Puzzle(区间DP,直接用矩阵相乘的方式也对)
- poj 1651 Multiplication Puzzle(区间dp 矩阵链乘法)
- POJ 1651:Multiplication Puzzle 矩阵相乘式DP
- POJ 1651 Multiplication Puzzle (区间DP)
- POJ 1651 Multiplication Puzzle(区间dp)
- poj 1651 Multiplication Puzzle (区间DP)
- POJ 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间dp)
- POJ 1651 - Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle (区间DP)
- poj 1651 Multiplication Puzzle(区间DP)
- poj 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间dp)
- POJ 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间DP)
- win7 64位上cocos2dx2.0.4移植android的全过程
- 创建Fragment
- 关于STM32 uC/OS-II中任务调度和串口丢数据的原因
- android:view的状态保存
- Github学习总结
- poj 1651 Multiplication Puzzle(区间DP,直接用矩阵相乘的方式也对)
- Oracle connect by
- 开源虚拟化操作系统OSv初探
- C++的成员函数在多线程下运行的测试
- 虚函数对C++多态的影响
- 选择排序 冒泡排序
- 隐忍与守拙
- poj 2828 Buy Tickets(线段树单点更新)
- 纯CSS实现checkbox