算法提高 矩阵乘法(90分)
2018-02-12 22:29
260 查看
方法一:(一直超时)
代码如下:
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] ); } }
相关文章推荐
- 算法提高 矩阵乘法
- 蓝桥杯算法提高 矩阵乘法
- 算法提高 矩阵乘法
- 蓝桥杯 算法提高 矩阵乘法 (区间dp)
- 算法提高 矩阵乘法 区间dp
- 算法提高 矩阵乘法 蓝桥杯
- 蓝桥杯 算法提高 矩阵乘法 区间dp
- 【蓝桥】算法提高 矩阵乘法
- 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】
- 算法笔记_081:蓝桥杯练习 算法提高 矩阵乘法(Java)
- 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】
- 算法提高 矩阵乘法 (区间dp)
- 蓝桥杯 算法提高 矩阵乘法 【经典区间dp】
- 算法提高 矩阵乘法
- cpu gpu做矩阵乘法效率比对,虽然如此,但是对需要自己做的算法是否能如此高效的提高还是未知
- 算法提高 矩阵乘法 区间DP
- 算法提高 矩阵乘法 区间dp
- 算法提高 矩阵乘法
- 蓝桥杯 算法提高 矩阵乘法(Java解题)
- 算法提高-矩阵乘法[DP]