Codeforces Round #190 (Div.2)
はい。
http://codeforces.com/contest/322
A. Ciel and Dancing
ざっくりと大意
・n人の少年とm人の少女で作れるダンスのペアをなんか列挙??
方針のようなもの
・単純な列挙ではなく順番も意味があるらしいので後で
B. Ciel and Flowers
ざっくりと大意
・r,g,bの花がある 単色でなら3本で1つの花束作成か3色1本ずつで1つの花束作成
方針のようなもの
・作成の優先は3色で作る方が楽だと思う。後は余る本数に注意。
l=map(int,raw_input().split()) f=0 if 0 not in l: f=1 ans=chk=min(l) for i in range(3): l[i]-=chk ans+=l[i]/3 l[i]=l[i]%3 if l.count(2)>1 and ans>0 and f==1: print ans+1 else: print ans
3色で作れる最大の花束はr,g,bのmin値、お後は他の色が3本以上余ってればそれで作れる花束を加算する。だがしかし元々が3色あって2色で2本余る時は実はもう1束多く作れたので1を足す。
3,5,5という数だった場合に単色での束を優先で考えると各色1束ずつで3束でg,bは2本ずつ余っている。3色での束を優先で考えるとmin値の3束を作ってg,bは2本ずつ余る。だがしかしこの2本ずつ余る場合の最善手は3色の花束を2つとg,bの花束を1つずつで4束作れる。単純に2本が2色で余ってたら+1をすると0,2,2の時にも1束作った計算にしてしまうので最初の花の数に0が含まれていないことを判定条件に加える。