[紀中][總結]2021.08.11【NOIP提高A、B組】模擬
阿新 • • 發佈:2021-08-11
2021.08.11【NOIP提高A、B組】模擬
T1
正解顯然是 狀壓DP ,只用分別考慮六個面的狀態。
當然,這個資料氵水沝淼㵘,所以我們暴搜也能過(
狀壓的題解我不太會寫,就放 dalao lkj 的題解 \(link\)
然後暴搜要注意的的是,只用考慮三個面的情況,因為兩兩相對的,所以只用考慮三個面的情況。
然後注意初始值要儘量賦大(地板大到無法想象[doge]
Code - 暴搜
#include <bits/stdc++.h> #define N 20 #define ll long long using namespace std; ll n, ans; ll a[N], b[N], c[N], f[N]; inline void hhd (ll add, ll ae, ll be) { if (add > ans) ans = add; for (int i = 1; i <= n; ++ i) { if (f[i]) continue; if (a[i] <= ae && b[i] <= be || a[i] <= be && b[i] <= ae) { f[i] = 1; hhd (add + c[i], a[i], b[i]); f[i] = 0; } if (a[i] <= ae && c[i] <= be || a[i] <= be && c[i] <= ae) { f[i] = 1; hhd (add + b[i], a[i], c[i]); f[i] = 0; } if (c[i] <= ae && b[i] <= be || c[i] <= be && b[i] <= ae) { f[i] = 1; hhd (add + a[i], b[i], c[i]); f[i] = 0; } } } int main () { scanf ("%lld", &n); for (int i = 1; i <= n; ++ i) scanf ("%lld%lld%lld", &a[i], &b[i], &c[i]); hhd (0, 999999999, 999999999); printf ("%lld", ans); return 0; }
T2
簡單貪心,再跑一遍類似於克魯斯卡爾的奇怪亂搞即可
T3
神TM的迴文自動機,不會