SRM568 Div1 Easy(250), Div2 Medium(500) BallsSeparating

BallsSeparating

それぞれの色のボールを集める箱を決めれば良い。問題の制約から各色1個以上はあるので、箱が3個未満なら-1。

#include <vector>
using namespace std;

class BallsSeparating{public:
int minOperations( vector <int> red, vector <int> green, vector <int> blue )
{
    int INF = 0x7fffffff;
    int ans = INF;
    int n = (int)red.size();

    if ( n<3 )
        return -1;

    for ( int r=0; r<n; r++ )
    for ( int g=0; g<n; g++ )
    for ( int b=0; b<n; b++ )
    if ( r!=g && g!=b && b!=r )
    {
        int c = 0;
        for ( int i=0; i<n; i++ )
        {
            if ( false );
            else if ( i==r ) c += green[i]+blue[i];
            else if ( i==g ) c += red[i]+blue[i];
            else if ( i==b ) c += red[i]+green[i];
            else c += red[i]+green[i]+blue[i]-max(red[i],max(green[i],blue[i]));
        }
        ans = min(ans,c);
    }

    return ans==INF ? -1 : ans;
}};