Codeforces Round #385 (Div. 2), problem: (E) Hongcow Buys a Deck of Cards Solution in C/C++

Affiliate Disclosure: This post contains Amazon affiliate links. If you purchase through these links, eBlogarithm may earn a commission at no extra cost to you. Prices and availability are subject to change.
#include<bits/stdc++.h>
using namespace std;

const int maxn=16,INF=0x3f3f3f3f;
char type[maxn];
int R[maxn],B[maxn];

char readchar() {
	for(;;) {
		char ch=getchar();
		if(!isspace(ch)) {
			return ch;
		}
	}
}

int n;

typedef pair<int,int> pii;
typedef set<pii> Spii;
Spii dp[1<<maxn];

void Insert(Spii& s,const pii& p) {
	Spii::iterator it=s.lower_bound(p);
	if(it==s.begin()||(--it)->second>p.second) {
		s.insert(p);
		it=s.upper_bound(p);
		while(it!=s.end()&&it->second>=p.second) {
			s.erase(it++);
		}
	}
}

void DP(int s) {
	Spii& res=dp[s];
	if(res.size()) {
		return;
	}
	if(s==0) {
		res.insert(make_pair(0,0));
		return;
	}
	int curR=0,curB=0;
	for(int i=0;i<n;i++) {
		if(!((s&(1<<i)))) {
			if(type[i]=='R') {
				curR++;
			} else {
				curB++;
			}
		}
	}
	for(int i=0;i<n;i++) {
		if(s&(1<<i)) {
			DP(s&(~(1<<i)));
			Spii& tmp=dp[s&(~(1<<i))];
			for(Spii::iterator it=tmp.begin();it!=tmp.end();it++) {
				Insert(res,make_pair(it->first+max(0,R[i]-curR),it->second+max(0,B[i]-curB)));
			}
		}
	}
}

int main() {
	cin>>n;
	for(int i=0;i<n;i++) {
		type[i]=readchar();
		cin>>R[i]>>B[i];
	}
	DP((1<<n)-1);
	int ans=INF;
	Spii& res=dp[(1<<n)-1];
	for(Spii::iterator it=res.begin();it!=res.end();it++) {
		ans=min(ans,max(it->first,it->second)+n);
	}
	cout<<ans<<endl;
	return 0;
}

📦 Looking for Codeforces Round 385 Div Problem Hongcow? Check the best deals on Amazon.

🛒 Shop Codeforces Round 385 Div Problem Hongcow on Amazon

As an Amazon Associate, eBlogarithm earns from qualifying purchases. Prices and availability are subject to change.

Affiliate Disclosure: This post contains Amazon affiliate links. If you purchase through these links, eBlogarithm may earn a commission at no extra cost to you. Prices and availability are subject to change.
#include<bits/stdc++.h>
using namespace std;

const int maxn=16,INF=0x3f3f3f3f;
char type[maxn];
int R[maxn],B[maxn];

char readchar() {
	for(;;) {
		char ch=getchar();
		if(!isspace(ch)) {
			return ch;
		}
	}
}

int n;

typedef pair<int,int> pii;
typedef set<pii> Spii;
Spii dp[1<<maxn];

void Insert(Spii& s,const pii& p) {
	Spii::iterator it=s.lower_bound(p);
	if(it==s.begin()||(--it)->second>p.second) {
		s.insert(p);
		it=s.upper_bound(p);
		while(it!=s.end()&&it->second>=p.second) {
			s.erase(it++);
		}
	}
}

void DP(int s) {
	Spii& res=dp[s];
	if(res.size()) {
		return;
	}
	if(s==0) {
		res.insert(make_pair(0,0));
		return;
	}
	int curR=0,curB=0;
	for(int i=0;i<n;i++) {
		if(!((s&(1<<i)))) {
			if(type[i]=='R') {
				curR++;
			} else {
				curB++;
			}
		}
	}
	for(int i=0;i<n;i++) {
		if(s&(1<<i)) {
			DP(s&(~(1<<i)));
			Spii& tmp=dp[s&(~(1<<i))];
			for(Spii::iterator it=tmp.begin();it!=tmp.end();it++) {
				Insert(res,make_pair(it->first+max(0,R[i]-curR),it->second+max(0,B[i]-curB)));
			}
		}
	}
}

int main() {
	cin>>n;
	for(int i=0;i<n;i++) {
		type[i]=readchar();
		cin>>R[i]>>B[i];
	}
	DP((1<<n)-1);
	int ans=INF;
	Spii& res=dp[(1<<n)-1];
	for(Spii::iterator it=res.begin();it!=res.end();it++) {
		ans=min(ans,max(it->first,it->second)+n);
	}
	cout<<ans<<endl;
	return 0;
}

📦 Looking for Codeforces Round 385 Div Problem Hongcow? Check the best deals on Amazon.

🛒 Shop Codeforces Round 385 Div Problem Hongcow on Amazon

As an Amazon Associate, eBlogarithm earns from qualifying purchases. Prices and availability are subject to change.

More from author

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Related posts

Advertismentspot_img

Latest posts

Indian Army Organises Inter-Government Degree College Skit Competition in Kupwara

In a vibrant showcase of youthful talent, creativity, and social awareness, the Indian Army successfully organized an Inter-Government Degree College Skit Competition at the...

Best Work-From-Home & Productivity Tech Gifts (2026)

The Best Work-From-Home Tech Gifts for 2026 The home office has become a permanent fixture of modern professional life. Whether your recipient has been working...

5 Viral Kitchen Gadgets Actually Worth Gifting in 2026

Viral Kitchen Gadgets That Are Actually Worth Gifting in 2026 For every kitchen gadget that genuinely changes how you cook, there are a dozen that...

Want to stay up to date with the latest news?

We would love to hear from you! Please fill in your details and we will stay in touch. It's that simple!