/ Vijos / 讨论 / 问答 /

C++或者C语言,数据结构(动态规划或递归均可)

题目:你决定用一些高度不同的石头堆砌成大门左右两侧的柱子,并希望大门的高度最大。左右两侧的柱子必须高度相等,否则大门没法安装横梁。

例如,如果三块石头的高度分别为 1、2 和 3,则可以将它们堆成高度为 6 的石头柱子。如果另外还有两块高度分别为2和4的石头,那么就可以组成大门两侧的柱子了,大门高度为6。

返回大门最大可能的高度。如果这堆石头没法安装大门,请返回 0。

可能有若干块高度相同的石头。

输入格式:
第一行为一个整数n,表示有多少块石头。第二行为每块石头的高度,用空格隔开。
输出格式:
一个整数,表示大门最大可能高度。
输入数据范围:
0<=n<=20
1<=每块石头的高度<=1000
石头总高度<=5000

示例1:
输入:
4
1 2 3 6
输出:
6
提示:两侧的柱子分别由石块1+2+3 和 6 组成。

示例2:
输入:
6
1 2 3 4 5 6
输出:
10
提示:两侧的柱子分别由石块2+3+5 和 4+6 组成。

示例3:
输入:
2
1 2
输出:
0
提示:无法组成两侧高度相等的柱子。

示例4:
输入:
20
1 2 4 8 16 32 64 128 256 512 50 50 50 150 150 150 100 100 100 123
输出:
请根据程序运行结果提供

0 条评论

目前还没有评论...