每日 20260930 && 1002
No.1731 Product of Subsequence
K 很大,于是考虑按约数 DP,因为非约束不会提供贡献:
$$
f_{i+1,j} := f_{i+1,j} + f_{i, j}
$$
$$ f_{i+1, \gcd(K, j \times A_i)} := f_{i+1, \gcd(K, j \times A_i)} + f_{i,j} $$
就可以了,其中 $f_{i,j}$ 表示到第 i 个数字时候,选择的子序列的积的最大约数是 j 时候的子序列数目。
No.1095
namespace XK {
void solve() {
INT N; cin >> N;
V<ll> A(N); rep(i, N) cin >> A[i];
set<ll> ls, rs;
rep(i, N) rs.insert(A[i]);
ls.insert(A[0]), rs.erase(A[0]);
ll ans = LINF;
rep(i, N - 1) {
rs.erase(A[i]);
ll ml = *ls.begin(), mr = *rs.begin();
if(ml < A[i] && mr < A[i]) chmin(ans, ml + mr + A[i]);
auto l = ls.upper_bound(A[i]), r = rs.upper_bound(A[i]);
if(l != ls.end() && r != rs.end()) {
chmin(ans, *l + *r + A[i]);
}
ls.insert(A[i]);
}
cout << (ans == LINF ? -1 : ans);
}
};