Skip to content

Commit 8370292

Browse files
committed
srm 568 div 1 250 dp
1 parent ea8cf7f commit 8370292

File tree

1 file changed

+16
-19
lines changed

1 file changed

+16
-19
lines changed

BallsSeparating.cpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,31 +32,28 @@ typedef long long ll;
3232
#define fke(b) for(int k=0; k < ((int)(b)); k++) // k -> [0, b]
3333
#define fle(b) for(int l=0; l <= ((int)(b)); l++) // l -> [0, b]
3434
#define pb push_back
35-
35+
#define inf 1000000000
36+
3637
class BallsSeparating{
3738

3839
public:
39-
int minOperations(vector <int> red, vector <int> green, vector <int> blue){
40-
int n = red.size();
40+
int minOperations(vi r, vi g, vi b){
41+
int n = r.size();
4142
if(n < 3) return -1;
42-
int sum = 0, s = 0;
43-
fi(n) sum += red[i] + green[i] + blue[i];
44-
45-
fi(n) fj(n) fk(n) {
46-
if(i == j || j == k || k == i) continue;
47-
vi v;
48-
v.pb(red[i]);
49-
v.pb(green[j]);
50-
v.pb(blue[k]);
51-
52-
for(int t = 0; t < n; t++){
53-
if(t == i || t == j || t == k) continue;
54-
int mx = max(red[t], max(blue[t], green[t]));
55-
v.pb(mx);
43+
int dp[10];
44+
fj(10) dp[j] = inf;
45+
dp[0] = 0;
46+
fi(n){
47+
int t[10];
48+
fk(10) t[k] = inf;
49+
fj(8){
50+
t[j|1] = min(t[j|1], dp[j] + b[i] + g[i]);
51+
t[j|2] = min(t[j|2], dp[j] + r[i] + b[i]);
52+
t[j|4] = min(t[j|4], dp[j] + g[i] + r[i]);
5653
}
57-
s = max(s, accumulate(v.begin(), v.end(), 0));
54+
fk(8) dp[k] = t[k];
5855
}
59-
return sum - s;
56+
return dp[7];
6057
}
6158

6259
// BEGIN CUT HERE

0 commit comments

Comments
 (0)