简单的说:给你一项链,项链上有n颗珠子。相邻的两颗珠子可以合并(两个合并成一个)。合并的同时会放出一定的能量。不同的珠子的合并所释放的能量是不同的。问:按照怎样的次序合并才能使释放的能量最多?
我们用top表示第i颗珠子的头标记,用wei表示第i颗珠子的尾标记,合并两颗相邻珠子所释放的能量是:
Q=top*wei*wei[i+1Q=top∗wei∗wei[i+1]或 top*top[i+1]*wei[i+1]top∗top[i+1]∗wei[i+1];
(一个样的)
合并不一定按顺序的,本题所提供的样例也是导致出错的一大原因。
nn个珠子进行一次合并的后,就归结到了n-1n−1个珠子的合并的问题。所以我们想到了动态规划。
既然是dpdp题目,必然要满足dpdp的两大条件:
1.最优子结构性质; 设Q[i,j]Q[i,j]表示第i颗珠子到第j颗珠子合并所产生的能量。显然Q[1,n]Q[1,n]表示的是合并产生的总的能量。给定一种标号方法,maxQ[1,n]maxQ[1,n]就是所要求的。设最后一次合并在kk处进行,则有Q[1,n]=Q[1,k]+Q[k+1,n]+top[1]*wei[k]*wei[n]Q[1,n]=Q[1,k]+Q[k+1,n]+top[1]∗wei[k]∗wei[n]。要Q[1,n]Q[1,n]最大,必然要Q[1,k]Q[1,k],Q[k+1,n]Q[k+1,n]最大。
证明:假设Q[1,k]Q[1,k]不是最大,则必然存在一Q'[1,k]>Q[1,k]Q′[1,k]>Q[1,k]。那么就有Q'[1,n]=Q'[1,k]+Q[k+1,n]