石子合并问题(求助 改错)
一列石子,公式得到了,用动态规划实现时总是输出0我实现矩阵连乘算法用动态规划也不能得到正确结果
[code=c]
/*m[i][j]={0 i=j;min{m[i][k-1]+m[k][j]+w(i,j)} i<j}*/
#include <iostream>
using namespace std;
const int N=4;
int a[N]={4,4,5,9};
int m[N][N]={0};
int s[N][N]={0};
int Sum(int a[],int i,int j)//最后一次合并的得分
{
int temp=0;
for(int k=i;k<=j;k++)
{
temp+=a[k];
}
return temp;
}
void Stone()//动态规划求最小得分
{
int i,j,r,k,t;
for(i=0;i<N;i++)
m[i][i]=0;
for(r=1;r<N;r++)
{
for(i=0;i<N-r;i++)
{
j=i+r;
for(k=i+1;k<j;k++)
{
t=m[i][k-1]+m[k][j]+Sum(a,i,j);
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
}
int main()
{
Stone();
cout<<m[0][N-1]<<endl;
return 0;
} [/code]