zhangzm
矩阵连乘问题
给定n个矩阵,给这n个矩阵加若干个括号,使得这n个矩阵所用的乘法次数最少。
动态规划的解法:
m[i][j]=min{ m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]}
其中 i<=k<j
code:
1
#include
<
iostream
>
2
#include
<
vector
>
3
#include
<
fstream
>
4
using
namespace
std;
5
int
m[
100
][
100
],s[
100
][
100
];
6
int
p[
100
];
7
int
sovle(
int
n)
{
8
int
i,j,k,r;
9
for
(i
=
1
;i
<=
n;i
++
)m[i][i]
=
0
;
10
for
(r
=
2
;r
<=
n;r
++
)
{
11
for
(i
=
1
;i
<=
n
-
r
+
1
;i
++
)
{
12
j
=
i
+
r
-
1
;
13
//
cout<<"j= "<<j<<endl;
14
int
t
=
m[i][i]
+
m[i
+
1
][j]
+
p[i
-
1
]
*
p[i]
*
p[j];
15
for
(k
=
i
+
1
;k
<
j;k
++
)
{
16
int
mt
=
m[i][k]
+
m[k
+
1
][j]
+
p[i
-
1
]
*
p[k]
*
p[j];
17
if
(t
>
mt)
{t
=
mt;}
18
}
19
m[i][j]
=
t;
20
}
21
}
22
cout
<<
"
**
"
<<
m[
1
][n
+
3
]
<<
endl;
23
return
m[
1
][n];
24
}
25
26
27
28
int
main()
{
29
fstream fin(
"
matrix.txt
"
);
30
int
n;
31
fin
>>
n;
32
for
(
int
i
=
0
;i
<
n;i
++
)
{
33
fin
>>
p[i];
34
}
35
36
cout
<<
sovle(n
-
1
)
<<
endl;
37
38
system(
"
pause
"
);
39
fin.close();
40
41
return
0
;
42
}
43
posted on 2010-06-06 20:12
bluedream
阅读(288)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © bluedream
<
2025年3月
>
日
一
二
三
四
五
六
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
导航
C++博客
首页
新随笔
联系
聚合
管理
统计
随笔 - 6
文章 - 0
评论 - 0
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
(6)
2011年5月 (1)
2010年6月 (4)
2010年5月 (1)
搜索
最新评论
阅读排行榜
1. 最小m段和问题(3552)
2. [转] HDU 动态规划(46道题目)倾情奉献~ 只提供思路与状态转移方程(445)
3. 程序员面试100题_01 把二元查找树转变成排序的双向链表(352)
4. POJ 2593 Max Sequence(301)
5. 矩阵连乘问题(288)
评论排行榜
1. 最小m段和问题(0)
2. 矩阵连乘问题(0)
3. [转] HDU 动态规划(46道题目)倾情奉献~ 只提供思路与状态转移方程(0)
4. POJ 2593 Max Sequence(0)
5. 转 POJ 计算几何入门题目推荐(0)