Date:2022.04.03
题目描述
小明很喜欢摆积木,现在他正在玩的积木是由 N 个木块组成的,他想用这些木块搭出两座高度相同的塔,一座塔的高度是搭建它的所有木块的高度和,并且一座塔至少要用一个木块。每个木块只能用一次,也可以不用。目前已知每块木块的高度,小明想知道在最终两个塔的高度相同的情况下,他所能搭的塔的最大高度是多少,你能帮助他吗?
输入格式
第一行为一个整数 N,表示木块个数。
第二行是 N 个整数,表示 N 块木块的高度。
输出格式
仅一个整数,表示能搭建的塔的最大高度,若不能搭建两座相同高度的塔,则输出 -1。
输入输出样例
输入 #1复制
3
2 3 5
输出 #1复制
5
说明/提示
对于 100% 的数据,N≤50 ,每块木块的高度 h 满足 1≤h≤500000,所有木块的高度总和 ≤500000。
思路: f [ i ] [ j ] : f[i][j]: f[i][j]:前 i i i个积木组成高塔和低塔,高塔-低塔== j j j时较高塔的高度为 f [ i ] [ j ] f[i][j] f[i][j]。
状态转移:
① f [ i ] [ j ] = f [ i − 1 ] [ j ] ; f[i][j]=f[i-1][j]; f[i][j]=f[i−1][j];【即不选第 i i i个积木】
② f [ i ] [ j ] = m a x ( f [ i ] [ j ] , f [ i − 1 ] [ j − h [ i ] ] + h [ i ] ; f[i][j]=max(f[i][j],f[i-1][j-h[i]]+h[i]; f[i][j]=max(f[i][j],f[i−