Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define f first
- #define s second
- #define pb push_back
- #define mp make_pair
- #define ll long long
- #define IOS ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
- using namespace std;
- const int INF = 1e9 + 1;
- const int MOD = 1e9 + 7;
- const int MAXN = 1e6 + 10;
- char c[MAXN];
- int r[MAXN], b[MAXN];
- int dp[70000][2][270];
- void solve(){
- int n;
- cin >> n;
- int cntR = 0;
- int cntB = 0;
- for (int i = 0; i < n; i++){
- cin >> c[i] >> r[i] >> b[i];
- int cnt = max(0, max(r[i] - n, b[i] - n));
- cntR += max(0, r[i] - max(0, (r[i] - cnt)));
- cntB += max(0, b[i] - max(0, (b[i] - cnt)));
- r[i] = max(0, r[i] - cnt);
- b[i] = max(0, b[i] - cnt);
- }
- for (int mask = 0; mask < (1 << n); mask++){
- for (int i = 0; i <= 1; i++){
- for (int j = 0; j <= 256; j++){
- dp[mask][i][j] = INF;
- }
- }
- }
- if (cntR >= cntB){
- dp[0][1][min(cntR - cntB, 256)] = max(cntR, cntB);
- }
- if (cntR <= cntB){
- dp[0][0][min(cntB - cntR, 256)] = max(cntR, cntB);
- }
- for (int mask = 0; mask < (1 << n); mask++){
- int A = 0, B = 0;
- for (int i = 0; i < n; i++){
- if ((mask >> i) & 1){
- if (c[i] == 'R'){
- A++;
- }
- else{
- B++;
- }
- }
- }
- int ri, bi, cost, cR, cB;
- for (int i = 0; i < n; i++){
- if (((mask >> i) & 1) == 0){
- for (int j = 0; j <= 1; j++){
- for (int k = 0; k <= 256; k++){
- if (dp[mask][j][k] < INF){
- ri = max(r[i] - A, 0);
- bi = max(b[i] - B, 0);
- cost = 0;
- cR = 0;
- cB = 0;
- if (j == 0){
- cB = k;
- }
- else{
- cR = k;
- }
- int tmp = max(0, max(ri - cR, bi - cB));
- cR = cR + tmp - ri;
- cB = cB + tmp - bi;
- cost += tmp;
- if (cR == 0){
- dp[mask | (1 << i)][0][cB] = min(dp[mask | (1 << i)][0][cB],
- dp[mask][j][k] + cost + 1);
- }
- if (cB == 0){
- dp[mask | (1 << i)][1][cR] = min(dp[mask | (1 << i)][1][cR],
- dp[mask][j][k] + cost + 1);
- }
- }
- }
- }
- }
- }
- }
- int ans = INF;
- for (int i = 0; i <= 1; i++){
- for (int j = 0; j <= 256; j++){
- ans = min(ans, dp[(1 << n) - 1][i][j]);
- }
- }
- cout << ans;
- }
- int main() {
- IOS;
- int t = 1;
- //cin >> t;
- while(t--){
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment