码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划

时间:2016-04-18 13:38:10      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

计算机算法中的动态规划也是将待求的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。但是适合用动态规划求解的问题,经过分解后得到的子问题往往不是互相独立的。例如矩阵连乘问题:

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

void matrix_chain(int * p, int n, int m[][100], int s[][100])
{
int i,j,k,r,t;
for(i=1; i<=n; i++) m[i][i]=0;
for(r=2; r<=n; r++)
for(i=1; i<=n-r+1; i++)
{
j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(k=i+1; k<j; k++)
{
t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j])
{m[i][j]=t; s[i][j]=k;}
}
}
}

void trace_back(int i, int j, int s[][100])
{
if(i==j) {
cout<<"A"<<i;
return;
}
cout<<"(";
trace_back(i,s[i][j],s);
cout<<",";
trace_back(s[i][j]+1, j, s);
cout<<")";
}

int main()
{
int size[100], total, i=0, m[100][100], s[100][100];
cout<<"请输入矩阵的个数:"<<endl;
cin>>total;
cout<<"请分别输入每一个矩阵的行列数:"<<endl;
while(i<=total)
cin>>size[i++];
matrix_chain(size, total, m, s);
cout<<"该"<<total<<"个矩阵的计算顺序为:"<<endl;
trace_back(1, 6, s);
cout<<endl;
return 0;
}

动态规划

标签:

原文地址:http://www.cnblogs.com/lingqian/p/5404041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!