题目大意:给一个整数n,接下来n个整数,分别表示每个字符的出现频率(按顺序给出),要求你给出一种编码方式,使得每个字符的编码按照字典序排列后的顺序与原先顺序一样,在此前提下希望整体编码长度最小。输出这个最小长度。
题解:看到编码长度最小,一般就会想到哈弗曼编码,何况题目也提了一下哈弗曼编码,但实际上这是个坑。问题就出在这个前提上:每个字符的编码按照字典序排列后的顺序与原先顺序一样。所以我们无法每次取出权值最小的两个节点,而只能选择相邻的节点,至于到底选择哪两个相邻节点,这便是石子问题。
设dp[i][j]表示第i到第j堆石子合并的最优值,sum[i][j]表示第i到第j堆石子的总数量。那么就有状态转移公式:
1、dp[i][j]=0 (i==j)