动态规划——矩阵乘法

public class test_7{
    public static int[] arry_1=new int[]{30,35,15,5,10,20,25};
    public static void main(String[] args){
        int[][] arry_2=new int[7][7];
        int[][] arry_3=new int[7][7];
        for(int i=0;i<arry_2.length;i++)
            for(int j=0;j<arry_2[i].length;j++){
                arry_2[i][j]=-1;
            }
        System.out.println(fun_1(1,6));
        System.out.println(fun_2(1,6,arry_2));
        System.out.println(fun_3(1,6,arry_3));
    }
    public static int fun_1(int i,int j){
        if(i==j)
            return 0;
        int u=fun_1(i+1,j)+arry_1[i-1]*arry_1[i]*arry_1[j];
        for(int k=i+1;k<j;k++){
            int q=fun_1(i,k)+fun_1(k+1,j)+arry_1[i-1]*arry_1[k]*arry_1[j];
            if(q<u){
                u=q;
            }
        }
        return u;
    }
    public static int fun_2(int i,int j,int[][] arry_2){
        if(arry_2[i][j] != -1)
            return arry_2[i][j];
        int ans = 0;
        if(i==j)
            ans=0;
        else{
            int u=fun_2(i+1,j,arry_2)+arry_1[i-1]*arry_1[i]*arry_1[j];
            for(int k=i+1;k<j;k++){
                int q=fun_2(i,k,arry_2)+fun_2(k+1,j,arry_2)+arry_1[i-1]*arry_1[k]*arry_1[j];
                if(q<u){
                    u=q;
                }
            }
            ans=u;
        }
        arry_2[i][j]=ans;
        return arry_2[i][j];
    }
    public static int fun_3(int i_1,int j_1,int arry_3[][]){
        for(int rec=2;rec<arry_3.length;rec++){
            for(int i=1;i<arry_3.length-rec+1;i++){
                int j=rec+i-1;
                int u=arry_3[i+1][j]+arry_1[i-1]*arry_1[i]*arry_1[j];
                for(int k=i+1;k<j;k++){
                    int q=arry_3[i][k]+arry_3[k+1][j]+arry_1[i-1]*arry_1[k]*arry_1[j];
                    if(q<u){
                        u=q;
                    }
                }
                 arry_3[i][j]=u;
            }    
        }
        return arry_3[i_1][j_1];
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值