您的位置:首页 > 其它

算法提高 矩阵乘法(90分)

2018-02-12 22:29 253 查看


方法一:(一直超时)

代码如下:



package ADV_232;
import java.util.Scanner;
public class Main {
public static void MatrixChain(long p[],int n){
long m[][]=new long[n+1][n+1];
for(int i=1;i<=n;i++) m[i][i]=0;
for(int r=2;r<=n;r++)
{
for(int i=1;i<=n-r+1;i++)
{
int j=i+r-1;
//计算初值,从j处断开
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
for(int k=i+1;k<j;k++)
{
long t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j])
m[i][j]=t;
}
}
}
System.out.println(m[1]
);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
long a[]=new long[n+1];
/*
* 指明n个矩阵的维数
*/
if(n>1000||n<1)
return;
for(int i=0;i<=n;i++)
a[i]=cin.nextInt();
MatrixChain(a,n);
}
}


方法二:(借鉴了别人的方法)

那人是用c++写的,对了!!

我照着他思路改了改,发现跟我的差不多,依旧是超时。

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
long dp[][]=new long[1005][1005];
long a[]=new long[1005];
for(int i=0;i<=n;i++){
a[i]=cin.nextInt();
dp[i][i]=0;
}
for(int r=2;r<=n;r++){
for(int i=1;i<=n+1-r;i++){
int j=i+r-1;
long temp=dp[i+1][j]+a[i-1]*a[i]*a[j];
for(int k=i+1;k<j;k++){
long t=dp[i][k]+dp[k+1][j]+a[i-1]*a[k]*a[j];
if(temp>t)
temp=t;
}
dp[i][j]=temp;
}
}
System.out.print(dp[1]
);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: