SRM554 Div1 Easy(250) TheBrickTowerEasyDivOne
TheBrickTowerEasyDivOne
同じ色が隣接しないという制約から、赤と青を交互に並べるしかない。
赤と青の高さと個数が等しいかどうかで場合分けする。高さが等しい場合はブロックの個数。等しくない場合、
(赤青)(赤青)(赤青)(␣青)
のように、2個ずつのグループに分けて考える。2個ずつのグループは1個以上赤青の最小値以下で、それぞれから、赤を取る、青を取る、そのままの3通りの長さが作れる。さらに、赤と青の個数が異なるならば、最後に多い方を付け加えることができる。
#include <algorithm> using namespace std; class TheBrickTowerEasyDivOne{public: int find( int redCount, int redHeight, int blueCount, int blueHeight ) { if ( redHeight==blueHeight ) if ( redCount==blueCount ) return min(redCount,blueCount)*2; else return min(redCount,blueCount)*2+1; else if ( redCount==blueCount ) return min(redCount,blueCount)*3; else return min(redCount,blueCount)*3+1; }};