結果
| 問題 |
No.1045 直方体大学
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-21 10:39:40 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,480 bytes |
| コンパイル時間 | 3,526 ms |
| コンパイル使用メモリ | 283,008 KB |
| 実行使用メモリ | 30,336 KB |
| 最終ジャッジ日時 | 2025-05-21 10:39:48 |
| 合計ジャッジ時間 | 7,372 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 2 WA * 15 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll N;
cin >> N;
vector<ll> X(N), Y(N), Z(N);
for(ll i = 0; i < N; i++) { cin >> X[i] >> Y[i] >> Z[i]; }
vector<vector<ll>> dp(1 << N, vector<ll>(3 * N, -1e18));
for(ll i = 0; i < N; i++) {
dp[1 << i][3 * i] = X[i];
dp[1 << i][3 * i + 1] = Y[i];
dp[1 << i][3 * i + 2] = Z[i];
}
for(ll i = 1; i < 1 << N; i++) {
for(ll j = 0; j < 3 * N; j++) {
if(~i >> (j / 3) & 1) { continue; }
ll p, q;
if(j % 3 == 0) { tie(p, q) = minmax(Y[j / 3], Z[j / 3]); }
if(j % 3 == 1) { tie(p, q) = minmax(X[j / 3], Z[j / 3]); }
if(j % 3 == 2) { tie(p, q) = minmax(X[j / 3], Y[j / 3]); }
for(ll k = 0; k < 3 * N; k++) {
if(i >> (k / 3) & 1) { continue; }
ll np, nq, h;
if(k % 3 == 0) {
tie(np, nq) = minmax(Y[k / 3], Z[k / 3]);
h = X[k / 3];
}
if(k % 3 == 1) {
tie(np, nq) = minmax(X[k / 3], Z[k / 3]);
h = Y[k / 3];
}
if(k % 3 == 2) {
tie(np, nq) = minmax(X[k / 3], Y[k / 3]);
h = Z[k / 3];
}
if(np <= p && nq <= q) { dp[i | (1 << (k / 3))][k / 3] = max(dp[i | (1 << (k / 3))][k / 3], dp[i][j] + h); }
}
}
}
ll ans = 0;
for(ll i = 0; i < 1 << N; i++) {
for(ll j = 0; j < 3 * N; j++) { ans = max(ans, dp[i][j]); }
}
cout << ans << "\n";
}