zoukankan      html  css  js  c++  java
  • 动态规划--合并石子

    动态规划: 

      minx[i][j]  记录着  从第 i 堆到第 j 堆的合并最小花费,令 minx[i][j] = 0;

          sum[i] 为前 i 堆石子数量的总和  sum[0] = 0;

        

    1、假如 i 和  j 中间存在 k  使得  minx[i][j] > minx[i][k] + minx[k+1][j] + sum[j] - sum[i-1];   i <= k < j;

      则   minx[i][j] = minx[i][k] + minx[k+1][j] + sum[j] - sum[i-1];

       

     i = 1, j =2; k = 1;

    minx[1][2] = minx[1][1] + minx[2][2] + sum[2] - sum[0] = 13;

    i = 1, j = 3 ; k = 1、2;

    ...

    	//动态规划--石子
    	
    	function straight(arr){
    		arr.unshift(0);
    		var n = arr.length+1;
    		var sum = []; // i 为前 i项的石子数和  sum[0] = 0;  sum = [0,5,13,19,28,30,33];
    		var minx = [];
    		
    		//初始化
    		sum[0] = 0;
    		for(var i = 1 ;  i <= n; i++){
    			minx[i] = [];
    			minx[i][i] = 0;
    		
    			sum[i] = sum[i-1] + arr[i];
    			
    		}
    		
    		//枚举
    		for(var v = 2; v <= n; v++ ){
    			for(var i = 1; i <= n-v-1; i++){ //起点
    				var j = i + v - 1; //终点
    				console.log(i,j)
    				minx[i][j] = Infinity; //初始化
    				var temp = sum[j] - sum[i-1];
    				for(var k = i; k < j; k++ ){
    					minx[i][j] = Math.min(minx[i][j],minx[i][k] + minx[k+1][j] + temp);
    				}
    			}
    		}
    		
    		console.log(minx);
    		
    		return minx[1][n-2];
    	}
    		
    	console.log(straight([5,8,6,9,2,3]));	
    

      

  • 相关阅读:
    4.Pod控制器
    3.Pod控制器应用进阶
    2.k8s资源清单
    1.使用kubeadm安装kubernetes
    1.Linux命令行快捷键、Vim
    3.docker镜像管理基础
    2019第二周作业
    2019春第一周作业编程总结
    对我影响最大的三位老师
    2018寒假作业学习总结
  • 原文地址:https://www.cnblogs.com/muamaker/p/9871279.html
Copyright © 2011-2022 走看看