UVa 348 - Optimal Array Multiplication Sequence
来源:互联网 发布:spring mvc json 编辑:程序博客网 时间:2024/05/01 05:56
矩阵链乘的问题,好像很多算法书上讲DP都是开始就将矩阵链乘。这个题不是要求最小的运算量,而是求最优的方案是什么,难就难在了递归的输出,如何记录路径,如何输出。
我也是参看了别人的代码。递归输出。不过这个转移方程还是蛮好找的。dp[i][j] = min ( dp[i][k], dp[k + 1][j], p[i - 1]p[k]p[j] ).
// File Name: UVa348.cpp// Author: Toy// Created Time: 2013年04月15日 星期一 19时03分31秒#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <cctype>#include <cmath>#include <string>#include <algorithm>#include <cstdlib>#include <iomanip>#include <list>#include <map>#include <set>#include <deque>#include <stack>#include <utility>#include <bitset>#define L(x) x << 1#define R(x) x << 1 | 1using namespace std;int num, path[15][15], p[15], dp[15][15], Case, tmp;void output ( int i, int j ) { if ( i == j ) printf ( "A%d", i ); else {printf ( "(" );output ( i, path[i][j] );printf ( " x " );output ( path[i][j] + 1, j );printf ( ")" ); }}void DP ( ) { for ( int d = 2; d <= num; ++d ) {for ( int i = 1, j = d; j <= num; ++i, ++j ) { dp[i][j] = 10000000000; for ( int k = i; k < j; ++k ) {tmp = dp[i][k] + dp[k + 1][j] + p[i - 1] * p[j] * p[k];if ( dp[i][j] > tmp ) dp[i][j] = tmp, path[i][j] = k; }} }}int main ( ) { Case = 0; while ( scanf ( "%d", &num ) != EOF && num ) {for ( int i = 1; i <= num; ++i ) scanf ( "%d%d", &p[i - 1], &p[i] );memset ( dp, 0, sizeof ( dp ) );memset ( path, 0, sizeof ( path ) );DP ( );printf ( "Case %d: ", ++Case );output ( 1, num );printf ( "\n" ); } return 0;}
- uva 348 Optimal Array Multiplication Sequence
- uva:348 - Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence
- UVA 348 Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- uva 348 - Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- Uva-348-Optimal Array Multiplication Sequence
- UVa 348: Optimal Array Multiplication Sequence
- UVa:348 Optimal Array Multiplication Sequence
- UVA - 348 Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence (DP)
- uva 348 - Optimal Array Multiplication Sequence
- UVa 348 Optimal Array Multiplication Sequence(dp)
- UVa 348 - Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence
- 使用windows挂钩监视键盘代码实现
- QQ2013 去广告
- assert()命令
- C++ MP3播放器按钮类似功能实现
- Oracle job 管理,创建、删除、查看,及其各参数。
- UVa 348 - Optimal Array Multiplication Sequence
- 例子4.4
- A Novel Approach to Improvingthe Efficiency of Storing and Accessing Small Files on Hadoop: a Case S
- iOS 新浪微博客户端Demo实践之(一)OAuth2.0认证
- 串的处理
- 给定一个字符串,统计一下哪个字符出现次数最大
- JS 数组
- mathematica自定义函数
- XML(一)之两种约束