2014 TCO Algorithm Round 2A SixteenBricks
解法
まず, 明らかにブロックは 高い -> 低い -> 高い -> 低い というような感じでデコボコになっている方が良いです。
ということで, ブロックを低い方から順番に並べると, 低い方 8 つは白, 高い方 8 つは黒, という感じで市松模様になっています。
あとは図を見て察して下さい。
class SixteenBricks { public: int maximumSurface(vector <int> h) { sort(h.begin(), h.end()); int ret = 16; for (int i = 8; i < 16; i++) ret += h[i]*4; for (int i = 0; i < 2; i++) ret -= h[i]*4; for (int i = 2; i < 6; i++) ret -= h[i]*2; return ret; } };