[BOJ 10881]完全探索2-プロドのプレゼントパッケージ

1168 ワード


箱は3つ固定されているので、全探索を使うことにしました.
変更すると、
1.側転時
2.枠位置の変更
3.枠構造の変更
for (int j = 0; j < 3; j++)
		{
			cin >> a[j].first >> a[j].second;
		}

		for (size_t j = 0; j < 3; j++)
		{
			a[j + 3].first = a[j].second;
			a[j + 3].second = a[j].first;
		}
このような側転の場合を計算した.
for (int q = 0; q < 6; q++)
{
	for (int w = 0; w < 6; w++)
	{
		for (int e = 0; e < 6; e++)
		{
			if (q % 3 == w % 3 || w % 3 == e % 3 || e % 3 == q % 3) {
				continue;
			}
複文を3つ書いて、if文がだめな場合をフィルタしました.このようにq w eで3種類の箱を表現した.
void second(int q, int w, int e) {
	int width = max(a[q].first, a[w].first + a[e].first);
	int height = a[q].second + max(a[w].second, a[e].second);
	
	ans = min(ans, width * height);
}
void three(int q, int w, int e) {
	int width = max(a[q].first, a[w].first);
	width = max(width, a[e].first);
	int height = a[q].second + a[w].second + a[e].second;

	ans = min(ans, width * height);
}
箱1+2が2階に置かれている場合と3+0が3階に置かれている場合は、一字型に表現されています.