๐Ÿ˜Š19942. ๋‹ค์ด์–ดํŠธ _ ๋น„๊ตํ•จ์ˆ˜ ์ฃผ์˜ํ•ด์•ผ ํ•จ.

phoenixKimยท2022๋…„ 7์›” 20์ผ
0

๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
40/174

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

: ๋น„ํŠธ๋งˆ์Šคํ‚น

์ตœ์ข… ํ’€์ด

: 220906 ํ™”

https://www.acmicpc.net/source/48808448

์ตœ๊ทผ ํ’€์ด 240124

  • ๋™์ผํ•œ cost ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•จ.
    ์•„๋ž˜ ๋†“์นœ ๋ถ€๋ถ„์„ ์ฝ๊ณ , ๋ฐ‘์˜ ์ •๋ฆฌํ•œ ๋‚ด์šฉ ๊ณต๋ถ€ ํ•„์š”.
    https://www.acmicpc.net/submit/19942/72285621

๋†“์นœ ๋ถ€๋ถ„ 240124

์•„๋ž˜ ๋นจ๊ฐ„ ์ค„ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด, cost ๋น„์šฉ์„ ์ธ๋ฑ์Šค๋กœ ํ•ด์„œ
second ๊ฐ’์„ vector๋กœ ๋‚˜์—ดํ•ด์•ผ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•จ.

  • ํ•ด๊ฒฐ์ฑ…
    : pair๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Œ.
    pair<int, vector> ์ด๋Ÿฐ์‹์œผ๋กœ.

    ํ•ต์‹ฌ!

vecotr ์—๋‹ค๊ฐ€ pair ๋„ฃ๊ณ  sort ํ•˜๊ธฐ.

: ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด sort ์ด์ „๊ณผ ์ดํ›„์˜ first ๊ฐ’ ๋ฟ์•„๋‹ˆ๋ผ, second ๊ฐ’๋„
๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅ๋จ์„ ๋ด์•ผ ํ•จ.

์•Œ์•„์•ผ ํ• ์ .

https://velog.io/@kwt0124/map-vector-vectorvector-%EB%B3%80%ED%99%98
: mapping ์ค‘๋ณต ์ €์žฅ

์ด๊ฑฐ ์•ˆ๋จ...

https://www.acmicpc.net/submit/19942/47795525

๋ฐ˜๋ก€

3

0 0 0 1

0 0 0 0 0

0 0 0 0 0

0 0 0 1 0

์ตœ๊ทผ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ

2๋ฒˆ์งธ์ฝ”๋“œ

: ๋ฒกํ„ฐ์—๋‹ค๊ฐ€ ๋‹ค ์ง‘์–ด๋†“๊ณ , ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜์ž.

๋ฌธ์ œ์ ์ด ์žˆ์Œ...
compare์˜ ๊ฒฝ์šฐ, ๋น„๊ต๋Œ€์ƒ์ด ๋™์ผํ•  ๊ฒฝ์šฐ์— ,,,
๋ฐ˜๋“œ์‹œ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด, ๋น„๊ต์‹์„ ํ†ตํ•ด์„œ ๋ฐ˜ํ™˜์„ ํ•ด์•ผํ•จ!

#include <iostream>
using namespace std;
#include <vector>
#include <string>
#include <algorithm>

struct yori
{
	int mp;
	int mf;
	int ms;
	int mv;
	int price;
};

bool compare(vector<int>&a, vector<int>&b)
{
	//๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์ดํ•ฉ price์ž„ ์ด๊ฑธ๋กœ ๋น„๊ตํ•ด์•ผ ํ•จ.
	if (a[a.size() - 1] < b[b.size() - 1])
		return true;
	else if (a[a.size() - 1] == b[b.size() - 1])
	{
		//๋™์ผํ•  ๊ฒฝ์šฐ, ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•จ. 
		//๋งŒ์•ฝ์— a์˜ ์‚ฌ์ „์ˆœ์ด ๋” ์•ž์„ ๋‹ค๋ฉด, true
		// ์•„๋‹ˆ๋ฉด b๊ฐ€ ์•ž์„ ๋‹ค๋ฉด false;

		int mmmin = min(a.size(), b.size());
		bool cc = false;
		for (int i = 0; i < mmmin; ++i)
		{
			if (a[i] < b[i])
			{
				cc = true;
			}
		}

		// ๊ฐ™์„ ๊ฒฝ์šฐ์— false๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ... 
		return false;
		//๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ 
		//if (a[0] < b[0])
		//	return true;
		//else
		//	return false;
	}
	return false;
}


int main()
{
	int n;
	cin >> n;

	yori mmin;
	cin >> mmin.mp >> mmin.mf >> mmin.ms >> mmin.mv;

	int mmax = 0;

	vector<yori>v(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> v[i].mp >> v[i].mf >> v[i].ms 
			>> v[i].mv >> v[i].price;
		mmax += v[i].price;
	}

	//cout << "output" << endl;
	//for (int i = 0; i < n; ++i)
	//{
	//	cout <<  v[i].mp << ","<< v[i].mf << 
	//		"," << v[i].ms << "," << v[i].mv 
	//		<< "," << v[i].price;
	//	cout << endl;
	//}
	
	
	
	// ์ด์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•จ.
	vector<vector<int>>res;
	//vector<int>res;

	// price๋ฅผ ๋นผ๋กœ 4๊ฐœ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ.
	// ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ. 
	// ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ํ™œ์šฉํ•จ.
	for (int i = 0; i < (1 << n); ++i)
	{
		yori test{0,0,0,0,0};
		vector<bool>check(n, false);
		//๊ฐ๊ฐ์˜ ์›์†Œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ.
		for (int j = 0; j < v.size(); ++j)
		{
			// 1 2 3 4 5 6

			// 1๋กœ ํ•˜๋ฉด ์•ˆ๋จ.
			// ์ฐธ์ผ ๊ฒฝ์šฐ์—๋งŒ , ํ•ด๋‹น ์ž๋ฆฟ์ˆ˜๊ฐ€ 1์ผ ๊ฒฝ์šฐ๋ฅผ ๋œปํ•จ.
			if (i & (1 << j))
			{
				test.mf += v[j].mf;
				test.mp += v[j].mp;
				test.mv += v[j].mv;
				test.ms += v[j].ms;
				test.price += v[j].price;
				check[j] = true;
			}
		}

		// ์ตœ์†Œ ์กฐ๊ฑด์— ๋งŒ์กฑํ•œ๋‹ค๋ฉด ์ €์žฅ
		// ์ฆ‰, mmin vs test๋ฅผ ๋น„๊ตํ•ด์„œ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋ฉด. 
		// ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋†“์ž. 
		if (test.mf >= mmin.mf && test.mp >= mmin.mp
			&& test.mv >= mmin.mv && test.ms >= mmin.ms)
		{
			// ์ •๋ ฌํ•ด์„œ ํ•˜๊ธฐ์—๋Š” ๋ณต์žกํ•˜๋‹ˆ๊นŒ.
			// price์˜ ์ดํ•ฉ๊ณ„๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ์ปทํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ
			// ๋ณ€๊ฒฝํ•˜์ž. 
			//if (mmax > test.price)
			//{
			//	// test.price๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ, ์‚ฌ์ „์ˆœ์œผ๋กœ ์ถœ๋ ฅ์ด๋ฏ€๋กœ
			//	// ์กฐ๊ฑด์€ ์ด๋ ‡๊ฒŒ๋งŒ ๋†“์ž.
			//	mmax = test.price;
			//	res.clear();
			//	for (int k = 0; k < v.size(); ++k)
			//	{
			//		if (check[k] == true)
			//		{
			//			res.push_back(k);
			//		}
			//	}
			//}

			//if (mmax > test.price)
			//{
			//	mmax = test.price;
			//}

			vector<int>tt;
			// ์–ด๋–ค ์›์†Œ๊ฐ€ ์„ ํƒ๋ฌ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•จ.
			// ์ฒดํฌ ๋ถˆ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž. 
			for (int k = 0; k < v.size(); ++k)
			{
				if (check[k] == true)
				{
					tt.push_back(k);
					//cout << k << " "; ์ถœ๋ ฅ์šฉ
				}
			}
			tt.push_back(test.price);
			res.push_back(tt);
			//cout << test.price << endl; ์ถœ๋ ฅ์šฉ
		}

		// ๋งˆ์ง€๋ง‰์— sort๋ฅผ ํ•ด์•ผ ํ• ๋“ฏํ•จ. 
		//๊ทธ๋ฆฌ๊ณ  2์ค‘ ํฌ๋ฌธ ์•ˆ์—์„œ ์ง„ํ–‰๋˜๋ฏ€๋กœ,
		// ์ปจํ…Œ์ด๋„ˆ๋Š” ์™ธ๋ถ€์—์„œ ์„ ์–ธํ•˜๋„๋ก ํ•˜์ž.
	}

	// 2์ค‘ ํฌ๋ฌธ ์ถœ๋ ฅํ•ด๋ณด์ž. 
	//for (int a = 0; a < res.size(); ++a)
	//{
	//	for (int b = 0; b < res[a].size(); ++b)
	//	{
	//		cout << res[a][b] << " ";
	//	}
	//	cout << endl;
	//}

	//cout << "sorting" << endl;

	sort(res.begin(), res.end() , compare);
	for (int a = 0; a < res.size(); ++a)
	{
		for (int b = 0; b < res[a].size(); ++b)
		{
			cout << res[a][b] << " ";
		}
		cout << endl;
	}

	if (res.size() == 0)
	{
		cout << -1;
	}
	else
	{
		cout << res[0][res[0].size() - 1] << endl;
		
		for (int i = 0; i < res[0].size() - 1; ++i)
			cout << res[0][i] + 1 << " ";
		// ์ด์ฐจ์› ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” 0์ด๊ณ ,
		// ๊ทธ ์•ˆ์˜ ๋ฒกํ„ฐ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•จ.

	}
	
}

์ตœ์ข…์ฝ”๋“œ

#include <iostream>
using namespace std;
#include <vector>
#include <string>
#include <algorithm>

struct yori
{
	int mp;
	int mf;
	int ms;
	int mv;
	int price;
};

bool compare(vector<int>&a, vector<int>&b)
{
	//๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์ดํ•ฉ price์ž„ ์ด๊ฑธ๋กœ ๋น„๊ตํ•ด์•ผ ํ•จ.
	if (a[a.size() - 1] < b[b.size() - 1])
		return true;
	else if (a[a.size() - 1] == b[b.size() - 1])
	{
		//๋™์ผํ•  ๊ฒฝ์šฐ, ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•จ. 
		//๋งŒ์•ฝ์— a์˜ ์‚ฌ์ „์ˆœ์ด ๋” ์•ž์„ ๋‹ค๋ฉด, true
		// ์•„๋‹ˆ๋ฉด b๊ฐ€ ์•ž์„ ๋‹ค๋ฉด false;

		int mmmin = min(a.size(), b.size()) - 1;
		bool cc = false;
		for (int i = 0; i < mmmin; ++i)
		{
			if (a[i] == b[i])
				continue;
			return a[i] < b[i];
			//if (a[i] < b[i])
			//{
			//	cc = true;
			//}
		}

		// ๊ฐ™์„ ๊ฒฝ์šฐ์— false๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ... 
		//return false;
		//๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ 
		//if (a[0] < b[0])
		//	return true;
		//else
		//	return false;
	}
	return false;
}


int main()
{
	int n;
	cin >> n;

	yori mmin;
	cin >> mmin.mp >> mmin.mf >> mmin.ms >> mmin.mv;

	int mmax = 0;

	vector<yori>v(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> v[i].mp >> v[i].mf >> v[i].ms 
			>> v[i].mv >> v[i].price;
		mmax += v[i].price;
	}

	//cout << "output" << endl;
	//for (int i = 0; i < n; ++i)
	//{
	//	cout <<  v[i].mp << ","<< v[i].mf << 
	//		"," << v[i].ms << "," << v[i].mv 
	//		<< "," << v[i].price;
	//	cout << endl;
	//}
	
	
	
	// ์ด์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•จ.
	vector<vector<int>>res;
	//vector<int>res;

	// price๋ฅผ ๋นผ๋กœ 4๊ฐœ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ.
	// ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ. 
	// ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ํ™œ์šฉํ•จ.
	for (int i = 0; i < (1 << n); ++i)
	{
		yori test{0,0,0,0,0};
		vector<bool>check(n, false);
		//๊ฐ๊ฐ์˜ ์›์†Œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ.
		for (int j = 0; j < v.size(); ++j)
		{
			// 1 2 3 4 5 6

			// 1๋กœ ํ•˜๋ฉด ์•ˆ๋จ.
			// ์ฐธ์ผ ๊ฒฝ์šฐ์—๋งŒ , ํ•ด๋‹น ์ž๋ฆฟ์ˆ˜๊ฐ€ 1์ผ ๊ฒฝ์šฐ๋ฅผ ๋œปํ•จ.
			if (i & (1 << j))
			{
				test.mf += v[j].mf;
				test.mp += v[j].mp;
				test.mv += v[j].mv;
				test.ms += v[j].ms;
				test.price += v[j].price;
				check[j] = true;
			}
		}

		// ์ตœ์†Œ ์กฐ๊ฑด์— ๋งŒ์กฑํ•œ๋‹ค๋ฉด ์ €์žฅ
		// ์ฆ‰, mmin vs test๋ฅผ ๋น„๊ตํ•ด์„œ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋ฉด. 
		// ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋†“์ž. 
		if (test.mf >= mmin.mf && test.mp >= mmin.mp
			&& test.mv >= mmin.mv && test.ms >= mmin.ms)
		{
			// ์ •๋ ฌํ•ด์„œ ํ•˜๊ธฐ์—๋Š” ๋ณต์žกํ•˜๋‹ˆ๊นŒ.
			// price์˜ ์ดํ•ฉ๊ณ„๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ์ปทํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ
			// ๋ณ€๊ฒฝํ•˜์ž. 
			//if (mmax > test.price)
			//{
			//	// test.price๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ, ์‚ฌ์ „์ˆœ์œผ๋กœ ์ถœ๋ ฅ์ด๋ฏ€๋กœ
			//	// ์กฐ๊ฑด์€ ์ด๋ ‡๊ฒŒ๋งŒ ๋†“์ž.
			//	mmax = test.price;
			//	res.clear();
			//	for (int k = 0; k < v.size(); ++k)
			//	{
			//		if (check[k] == true)
			//		{
			//			res.push_back(k);
			//		}
			//	}
			//}

			//if (mmax > test.price)
			//{
			//	mmax = test.price;
			//}

			vector<int>tt;
			// ์–ด๋–ค ์›์†Œ๊ฐ€ ์„ ํƒ๋ฌ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•จ.
			// ์ฒดํฌ ๋ถˆ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž. 
			for (int k = 0; k < v.size(); ++k)
			{
				if (check[k] == true)
				{
					tt.push_back(k);
					//cout << k << " "; ์ถœ๋ ฅ์šฉ
				}
			}
			tt.push_back(test.price);
			res.push_back(tt);
			//cout << test.price << endl; ์ถœ๋ ฅ์šฉ
		}

		// ๋งˆ์ง€๋ง‰์— sort๋ฅผ ํ•ด์•ผ ํ• ๋“ฏํ•จ. 
		//๊ทธ๋ฆฌ๊ณ  2์ค‘ ํฌ๋ฌธ ์•ˆ์—์„œ ์ง„ํ–‰๋˜๋ฏ€๋กœ,
		// ์ปจํ…Œ์ด๋„ˆ๋Š” ์™ธ๋ถ€์—์„œ ์„ ์–ธํ•˜๋„๋ก ํ•˜์ž.
	}

	// 2์ค‘ ํฌ๋ฌธ ์ถœ๋ ฅํ•ด๋ณด์ž. 
	//for (int a = 0; a < res.size(); ++a)
	//{
	//	for (int b = 0; b < res[a].size(); ++b)
	//	{
	//		cout << res[a][b] << " ";
	//	}
	//	cout << endl;
	//}

	//cout << "sorting" << endl;

	sort(res.begin(), res.end() , compare);
	//for (int a = 0; a < res.size(); ++a)
	//{
	//	for (int b = 0; b < res[a].size(); ++b)
	//	{
	//		cout << res[a][b] << " ";
	//	}
	//	cout << endl;
	//}

	if (res.size() == 0)
	{
		cout << -1;
	}
	else
	{
		cout << res[0][res[0].size() - 1] << endl;
		
		for (int i = 0; i < res[0].size() - 1; ++i)
			cout << res[0][i] + 1 << " ";
		// ์ด์ฐจ์› ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” 0์ด๊ณ ,
		// ๊ทธ ์•ˆ์˜ ๋ฒกํ„ฐ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•จ.

	}
	
}


์•Œ์•„์•ผ ํ•  ์ .

: map๊ณผ vector<vector>
๊ฐ€ ์–ด์งธ์„œ ์ด์ฐจ์› ๋ฒกํ„ฐ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์•Œ์•„๋ณด์ž.

์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ

#include <string>
#include <vector>
#include <iostream>
#include <tuple>
#include <map>
using namespace std;

struct jaeryo
{
	int m1;
	int m2;
	int m3;
	int m4;
	int cost;
};


int main()
{
	int n;
	cin >> n;

	// ๊ฐ™์€ ๋น„์šฉ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ, ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒƒ์ด๋ฏ€๋กœ,
	// ์ •๋ ฌ์„ ํ•ด์•ผ ํ•จ.
	jaeryo input;
	cin >> input.m1 >> input.m2 >> input.m3 >> input.m4;
	
	// tuple ๋ณด๋‹ค๋Š” struct๋ฅผ ์‚ฌ์šฉํ•˜์ž. 
	map<int, jaeryo>m;

	for (int i = 0; i < n; ++i)
	{
		jaeryo j;
		cin >> j.m1;
		cin >> j.m2;
		cin >> j.m3;
		cin >> j.m4;
		cin >> j.cost;

		m.insert(make_pair(i , j));

	}
	/*
	for (auto iter : m)
	{		
		cout << "์žฌ๋ฃŒ : " << iter.first << " ๋ฒˆ, ";
		cout << "๋‹จ๋ฐฑ์งˆ : " << iter.second.m1;
		cout << "์ง€๋ฐฉ : " << iter.second.m2;
		cout << "ํƒ„์ˆ˜ํ™”๋ฌผ : " << iter.second.m3;
		cout << "๋น„ํƒ€๋ฏผ : " << iter.second.m4;
		cout << "๊ฐ€๊ฒฉ : " << iter.second.cost;
		cout << endl;
	}
	*/

	// ์ตœ์ข… ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋ณ€์ˆ˜๋Š” 
	// cost์™€ ์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค์˜ ์ˆ˜์ธ๋ฐ
	// ์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค์ด 2๊ฐœ์ผ ์ˆ˜ ์žˆ๊ณ , 3๊ฐœ ์ผ ์ˆ˜๋„ ์žˆ๊ณ ,,
	map<int,vector<int>>result;

	// ๋น„ํŠธ๋งˆ์Šคํ‚น์œผ๋กœ ๊ฐ 6๊ฐœ๋ฅผ ๋Œ๋ฉด์„œ 
	// ๋งŒ์•ฝ์— ์กฐ๊ฑด์— ์ผ์น˜ํ•  ๊ฒฝ์šฐ
	// ๋ฒกํ„ฐ์—๋‹ค๊ฐ€ ์ผ๋‹จ ๋„ฃ์ž. 
	for (int i = 0; i < (1 << n); ++i)
	{
		// i๋ฅผ ๊ฐ€์ง€๊ณ  ๋ชจ๋“  ์žฌ๋ฃŒ์ธ n๊ณผ 
		// ๊ฐ ์›์†Œ๊ฐ€ 1์ผ ๊ฒฝ์šฐ, ์ฆ‰ ํ•ด๋‹น ์žฌ๋ฃŒ ์‚ฌ์šฉ ์œ ๋ฌด๋ฅผ
		// ์ฒดํฌํ•˜๋ฉด์„œ sum์„ ๊ณ„์‚ฐ

		jaeryo sum;
		sum.m1 = 0;
		sum.m2 = 0;
		sum.m3 = 0;
		sum.m4 = 0;

		vector<bool>check(n, false);

		int tempCost = 0;
		for (int j = 0; j < n; ++j)
		{
			// ๊ฐ ์›์†Œ์—์„œ ์žฌ๋ฃŒ ์„ ํƒ ํ• ๊นŒ? ๋ง๊นŒ ์ฒดํฌ ํ•˜๋Š” ๋ถ€๋ถ„
			if (i & (1 << j))
			{
				//ํ•ด๋‹น ์ž๋ฆฌ์˜ ์žฌ๋ฃŒ๋ฅผ ์„ ํƒํ•  ๊ฒฝ์šฐ, ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.
				sum.m1 += m[j].m1;
				sum.m2 += m[j].m2;
				sum.m3 += m[j].m3;
				sum.m4 += m[j].m4;
				check[j] = true;
				tempCost += m[j].cost;
			}
		}

		// ์กฐ๊ฑด๊ณผ ํ™•์ธํ•˜์ž. 
		if (sum.m1 >= input.m1 && sum.m2 >= input.m2
			&& sum.m3 >= input.m3 && sum.m4 >= input.m4)
		{
			vector<int>kk;
			// cost ์™€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ์—๋‹ค๊ฐ€ ์ €์žฅ์„
			// ํ•ด๋†“๊ณ ,,,, cost๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฑฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ 
			// ์ •๋ ฌํ•˜์ž. 			
			for (int k = 0; k < check.size(); ++k)
			{
				if (check[k] == true)
				{
					
					kk.push_back(k);					
				}
			}

			result.insert(make_pair(tempCost, kk));

		}

	}
	
	if (result.empty())
		cout << "-1";
	else
	{
		


		// ์ „์ฒด ํ™•์ธํ•˜๊ธฐ
		for (auto iter : result)
		{
			cout << "cost : ";
			cout << iter.first << endl;
			cout << " ";
		
			cout << "์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค ";
			for (int i = 0; i < iter.second.size(); ++i)
			{
				cout << iter.second[i] + 1;
				cout << " ";
				//cout << ",";
			}
			cout << endl;
			//break;
		}
	}
	
	
}


-> ์ฒซ๋ฒˆ์งธ๋งŒ ๋‚˜์˜ค๊ฒŒ ํ•œ๋‹ค์Œ์— ์ถœ๋ ฅํ•จ.
๊ฒฐ๊ณผ๋Š” ํ‹€๋ฆฌ๋‹ค๊ณ  ํ•จ... ใ…กใ…ก

  • ๋ฐ˜๋ก€๊ฐ€ ์žˆ์Œ

๋ฐ˜๋ก€ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. (๊ฒŒ์‹œ๊ธ€์— ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.)
input :
3
0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 1 0
output :
0
3
answer :
0
1 2 3
์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์ด ์ž‡์Œ.

: ๋งŒ์•ฝ์— tempCost์˜ ๊ฐ’์ด ๋™์ผํ•  ๊ฒฝ์šฐ, ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒƒ์„
์ถœ๋ ฅํ•˜๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ์Œ.
์ด๋ฅผ ์ฝ”๋“œ์— ์ ์šฉํ•˜์ง€ ๋ชปํ•ด์„œ ํ‹€๋ฆฐ ๊ฒƒ์ž„.

์•Œ์•„์•ผ ํ• ์ .

๋ฉ€ํ‹ฐ๋งต์„ ํ†ตํ•ด์„œ ํ’€๋ ค๊ณ  ํ•จ.

  • ์ฝ”๋“œ
#include <string>
#include <vector>
#include <iostream>
#include <tuple>
#include <map>
#include <algorithm>
using namespace std;

struct jaeryo
{
	int m1;
	int m2;
	int m3;
	int m4;
	int cost;
};

//๊ฐ€์žฅ ์ž‘์€ cost์ด๋ฏ€๋กœ 
int MAX = 987654321;


int main()
{
	int n;
	cin >> n;

	// ๊ฐ™์€ ๋น„์šฉ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ, ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒƒ์ด๋ฏ€๋กœ,
	// ์ •๋ ฌ์„ ํ•ด์•ผ ํ•จ.
	jaeryo input;
	cin >> input.m1 >> input.m2 >> input.m3 >> input.m4;

	// tuple ๋ณด๋‹ค๋Š” struct๋ฅผ ์‚ฌ์šฉํ•˜์ž. 
	map<int, jaeryo>m;

	for (int i = 0; i < n; ++i)
	{
		jaeryo j;
		cin >> j.m1;
		cin >> j.m2;
		cin >> j.m3;
		cin >> j.m4;
		cin >> j.cost;

		m.insert(make_pair(i, j));

	}
	/*
	for (auto iter : m)
	{
		cout << "์žฌ๋ฃŒ : " << iter.first << " ๋ฒˆ, ";
		cout << "๋‹จ๋ฐฑ์งˆ : " << iter.second.m1;
		cout << "์ง€๋ฐฉ : " << iter.second.m2;
		cout << "ํƒ„์ˆ˜ํ™”๋ฌผ : " << iter.second.m3;
		cout << "๋น„ํƒ€๋ฏผ : " << iter.second.m4;
		cout << "๊ฐ€๊ฒฉ : " << iter.second.cost;
		cout << endl;
	}
	*/

	// ์ตœ์ข… ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋ณ€์ˆ˜๋Š” 
	// cost์™€ ์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค์˜ ์ˆ˜์ธ๋ฐ
	// ์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค์ด 2๊ฐœ์ผ ์ˆ˜ ์žˆ๊ณ , 3๊ฐœ ์ผ ์ˆ˜๋„ ์žˆ๊ณ ,,
	multimap<int, vector<int>, greater<int>>result;

	// ๋น„ํŠธ๋งˆ์Šคํ‚น์œผ๋กœ ๊ฐ 6๊ฐœ๋ฅผ ๋Œ๋ฉด์„œ 
	// ๋งŒ์•ฝ์— ์กฐ๊ฑด์— ์ผ์น˜ํ•  ๊ฒฝ์šฐ
	// ๋ฒกํ„ฐ์—๋‹ค๊ฐ€ ์ผ๋‹จ ๋„ฃ์ž. 
	for (int i = 0; i < (1 << n); ++i)
	{
		// i๋ฅผ ๊ฐ€์ง€๊ณ  ๋ชจ๋“  ์žฌ๋ฃŒ์ธ n๊ณผ 
		// ๊ฐ ์›์†Œ๊ฐ€ 1์ผ ๊ฒฝ์šฐ, ์ฆ‰ ํ•ด๋‹น ์žฌ๋ฃŒ ์‚ฌ์šฉ ์œ ๋ฌด๋ฅผ
		// ์ฒดํฌํ•˜๋ฉด์„œ sum์„ ๊ณ„์‚ฐ

		jaeryo sum;
		sum.m1 = 0;
		sum.m2 = 0;
		sum.m3 = 0;
		sum.m4 = 0;

		// ๋ถˆ๋ณ€์ˆ˜๋ฅผ ์™œ ์ƒ๊ฐํ–ˆ๋ƒ๋ฉด? 
		// ๋ฒกํ„ฐ์— ๋“ค์–ด์˜ค๋Š” ๊ฐ’์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•จ...
		//vector<bool>check(n, false);
		vector<int>kk;

		int tempCost = 0;
		for (int j = 0; j < n; ++j)
		{
			// ๊ฐ ์›์†Œ์—์„œ ์žฌ๋ฃŒ ์„ ํƒ ํ• ๊นŒ? ๋ง๊นŒ ์ฒดํฌ ํ•˜๋Š” ๋ถ€๋ถ„
			if (i & (1 << j))
			{
				//ํ•ด๋‹น ์ž๋ฆฌ์˜ ์žฌ๋ฃŒ๋ฅผ ์„ ํƒํ•  ๊ฒฝ์šฐ, ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.
				sum.m1 += m[j].m1;
				sum.m2 += m[j].m2;
				sum.m3 += m[j].m3;
				sum.m4 += m[j].m4;
				//check[j] = true;
				tempCost += m[j].cost;
				kk.push_back(j);
			}
		}

		// ์กฐ๊ฑด๊ณผ ํ™•์ธํ•˜์ž. 
		if (sum.m1 >= input.m1 && sum.m2 >= input.m2
			&& sum.m3 >= input.m3 && sum.m4 >= input.m4)
		{	
			if (MAX >= tempCost)
			{
				MAX = tempCost;
				result.insert(make_pair(tempCost, kk));
			}			
		}		
	}

	//๋ฉ€ํ‹ฐ๋งต์€ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ...

	

	if (result.empty())
		cout << "-1";
	else
	{	
		
		// ์ „์ฒด ํ™•์ธํ•˜๊ธฐ
		for (auto iter : result)
		{
			cout << "cost : ";
			cout << iter.first << endl;

			cout << "์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค ";
			for (int i = 0; i < iter.second.size(); ++i)
			{
				cout << iter.second[i] + 1;
				cout << " ";
				//cout << ",";
			}
			cout << endl;
			//break;
		}
	}


}

๋ฌธ์ œ์ .

1๋ฒˆ : second๊ฐ’ ์ •๋ ฌ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ, multimap ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•จ. ๋‹ค๋ฅธ stl์„ ๋ง๋ถ™์—ฌ์„œ ํ•ด์•ผํ•จ.
2๋ฒˆ : cost ๊ฐ’์ด 0์ด๋ฏ€๋กœ ์ธ๋ฑ์Šค 0์œผ๋กœ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ,,,
multi_map์€ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ์•ˆ๋จ.....

ํ•ด๊ฒฐ์ฑ…

: ์ค‘๋ณต์ด ์žˆ์–ด์„œ multi_map์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ๋ฌธ์ œ์ ๋“ค์ด ๋งŽ์Œ.
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ž.

์ตœ์ข… ์ฝ”๋“œ

#include <string>
#include <vector>
#include <iostream>
#include <tuple>
#include <map>
#include <algorithm>
#include <list>
using namespace std;

struct jaeryo
{
	int m1;
	int m2;
	int m3;
	int m4;
	int cost;
};

//๊ฐ€์žฅ ์ž‘์€ cost์ด๋ฏ€๋กœ 
int MAX = 987654321;


int main()
{
	int n;
	cin >> n;

	// ๊ฐ™์€ ๋น„์šฉ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ, ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒƒ์ด๋ฏ€๋กœ,
	// ์ •๋ ฌ์„ ํ•ด์•ผ ํ•จ.
	jaeryo input;
	cin >> input.m1 >> input.m2 >> input.m3 >> input.m4;

	// tuple ๋ณด๋‹ค๋Š” struct๋ฅผ ์‚ฌ์šฉํ•˜์ž. 
	map<int, jaeryo>m;

	for (int i = 0; i < n; ++i)
	{
		jaeryo j;
		cin >> j.m1;
		cin >> j.m2;
		cin >> j.m3;
		cin >> j.m4;
		cin >> j.cost;

		m.insert(make_pair(i, j));

	}
	/*
	for (auto iter : m)
	{
		cout << "์žฌ๋ฃŒ : " << iter.first << " ๋ฒˆ, ";
		cout << "๋‹จ๋ฐฑ์งˆ : " << iter.second.m1;
		cout << "์ง€๋ฐฉ : " << iter.second.m2;
		cout << "ํƒ„์ˆ˜ํ™”๋ฌผ : " << iter.second.m3;
		cout << "๋น„ํƒ€๋ฏผ : " << iter.second.m4;
		cout << "๊ฐ€๊ฒฉ : " << iter.second.cost;
		cout << endl;
	}
	*/

	// ์ตœ์ข… ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋ณ€์ˆ˜๋Š” 
	// cost์™€ ์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค์˜ ์ˆ˜์ธ๋ฐ
	// ์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค์ด 2๊ฐœ์ผ ์ˆ˜ ์žˆ๊ณ , 3๊ฐœ ์ผ ์ˆ˜๋„ ์žˆ๊ณ ,,
	map<int, vector<vector<int>>>result;

	// ๋น„ํŠธ๋งˆ์Šคํ‚น์œผ๋กœ ๊ฐ 6๊ฐœ๋ฅผ ๋Œ๋ฉด์„œ 
	// ๋งŒ์•ฝ์— ์กฐ๊ฑด์— ์ผ์น˜ํ•  ๊ฒฝ์šฐ
	// ๋ฒกํ„ฐ์—๋‹ค๊ฐ€ ์ผ๋‹จ ๋„ฃ์ž. 
	for (int i = 0; i < (1 << n); ++i)
	{
		// i๋ฅผ ๊ฐ€์ง€๊ณ  ๋ชจ๋“  ์žฌ๋ฃŒ์ธ n๊ณผ 
		// ๊ฐ ์›์†Œ๊ฐ€ 1์ผ ๊ฒฝ์šฐ, ์ฆ‰ ํ•ด๋‹น ์žฌ๋ฃŒ ์‚ฌ์šฉ ์œ ๋ฌด๋ฅผ
		// ์ฒดํฌํ•˜๋ฉด์„œ sum์„ ๊ณ„์‚ฐ

		jaeryo sum;
		sum.m1 = 0;
		sum.m2 = 0;
		sum.m3 = 0;
		sum.m4 = 0;

		// ๋ถˆ๋ณ€์ˆ˜๋ฅผ ์™œ ์ƒ๊ฐํ–ˆ๋ƒ๋ฉด? 
		// ๋ฒกํ„ฐ์— ๋“ค์–ด์˜ค๋Š” ๊ฐ’์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•จ...
		//vector<bool>check(n, false);
		
		vector<int>kk;
		//list<int>kk;
		int tempCost = 0;
		for (int j = 0; j < n; ++j)
		{
			// ๊ฐ ์›์†Œ์—์„œ ์žฌ๋ฃŒ ์„ ํƒ ํ• ๊นŒ? ๋ง๊นŒ ์ฒดํฌ ํ•˜๋Š” ๋ถ€๋ถ„
			if (i & (1 << j))
			{
				//ํ•ด๋‹น ์ž๋ฆฌ์˜ ์žฌ๋ฃŒ๋ฅผ ์„ ํƒํ•  ๊ฒฝ์šฐ, ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.
				sum.m1 += m[j].m1;
				sum.m2 += m[j].m2;
				sum.m3 += m[j].m3;
				sum.m4 += m[j].m4;
				//check[j] = true;
				tempCost += m[j].cost;
				kk.push_back(j);
			}
		}

		// ์กฐ๊ฑด๊ณผ ํ™•์ธํ•˜์ž. 
		if (sum.m1 >= input.m1 && sum.m2 >= input.m2
			&& sum.m3 >= input.m3 && sum.m4 >= input.m4)
		{	
			if (MAX >= tempCost)
			{
				MAX = tempCost;
				//result.insert(make_pair(tempCost, kk));
				result[tempCost].push_back(kk);
			}			
		}		
	}

	//๋ฉ€ํ‹ฐ๋งต์€ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ...

	

	if (result.empty())
		cout << "-1";
	else
	{	
		
		// ์ „์ฒด ํ™•์ธํ•˜๊ธฐ
		//for (auto iter : result)
		//{
		//	cout << "cost : ";
		//	cout << iter.first << endl;
		//
		//	cout << "์žฌ๋ฃŒ์˜ ๋ฒˆํ˜ธ๋“ค ";
		//	for (int i = 0; i < iter.second.size(); ++i)
		//	{
		//		cout << iter.second[i] + 1;
		//		cout << " ";
		//		//cout << ",";
		//	}
		//	cout << endl;
		//	//break;
		//}
	}


}
profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด