SERVICE - Mobile Service
暴力
设 \(f_{i, a, b, c}\) 表示处理完前 \(i\) 个任务,第一个人在 \(a\) 位置,第二个人在 \(b\) 位置,第三个人在 \(c\) 位置的最小代价。
方程:
\[f_{i, a, b, c} = \min{f_{i-1, a', b, c} + c(a, a'), f_{i - 1, a, b', c} + c(b, b'), f_{i - 1, a, b, c'} + c(c, c')} \]微微优化
设 \(f_{i, a, b}\) 表示处理完前 \(i\) 个任务,一个人在 \(X_i\) 剩下两个人在 \(a, b\) 的最小代价。
for(int j = 1 ;j <= n; ++i) {
for(int i = j + 1, i <= n; ++i) {
if(a[i] > a[j]) {
f[j] = max(f[j] + 1, f[i]);
}
}
}
for(int i = 2; i <= n; ++i) {
for(int j = 1; j <= i - 1; ++j) {
if(a[j] < a[i]) {
f[i] = max(f[i], f[j] + 1);
}
}
}
考虑状态转移方程:
- \(a\) -> \(x_{i + 1}\)
- \(b\) -> \(x_{i + 1}\)
- \(x_i\) -> \(x_{i + 1}\)