算法描述
两艘船各自可装载重量为c1,c2,n个集装箱,各自的重量为w[n],设计一个可以装载的方案,使得两艘船装下全部集装箱
算法思路
将第一艘船尽量装满(第一艘船放的集装箱的重量之和接近c1),剩余的集装箱放入第二艘船,若剩余的集装箱重量之和大于第二艘船,则无解
定义一个一维数组,a[n] 存放对应的集装箱的重量
定义一个数组,m[i][j]表示第一艘船还可装载的重量j,可取集装箱编号范围为i,i+1...n的最大装载重量值
例如 现在有3个集装箱 重量分别为9,5,3,即a[1]=9 a[2]=5 a[3]=3
m[1][2]=0 可装载重量为2,此时上述的三个集装箱都不能装入,所以为最大可装载重量为0
m[1][3]=m[1][4]=3 可装载重量为3或者是4的时候,都是只能装入重量为3的那个集装箱,所以最大可装载重量为3 `
实际上,这里的3=a[3]+m[1][2],是一个递推的关系,具体看下面`
m[i][j]分下面两种情况
0<=j
j>=a[n] (可装载重量j大于或等于第n个集装箱的重量w[n]),此时剩余的可装载重量为j-a[n](装入了此时的集装箱),最大的可装载重量为m[i+1][j-w[n]]+w[n]
但是我们是需要最大的可装载重量,所以得与如果不将当前集装箱装入的那种情况m[i+1][j]进行比较
m[i][j]=Math.max(m[i+