結果
問題 |
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"; }