SRM568 Div1 Easy(250), Div2 Medium(500) 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; }};