UAPC 2011 D The Great Summer Contest

問題

三つの数a,b,cがあって、

  • aから三つを取って一つの組を作る
  • bから三つを取って一つの組を作る
  • cから三つを取って一つの組を作る
  • a,b,cから一つずつ取って一つの組を作る

ことができる。
組は最大で何個作れるか。

方針

貪欲にa,b,cから3つずつ取っていくと、
a=3,b=2,c=2のときに間違う。
a,b,cから一つずつ取るとり方は、3つ以上の場合は、
それぞれを3つずつ取る場合と同じなので考えなくてよい。よって一つずつ取るとり方を0〜2で試す。

ソースコード

int main(){
  ll a,b,c,d,e,f;
  while(cin>>a>>b>>c>>d>>e>>f,a||b||c||d||e||f){
      ll ans=0;
      a+=d; b+=e; c+=f;
      rep(i,min(min(a,10ll),min(b,c))+1){
        ans=max(ans,(a-i)/3+(b-i)/3+(c-i)/3+i+
        +min((a-i)%3,min((b-i)%3,(c-i)%3)));
      }
      cout<<ans<<endl;
  }
  return 0;
}