做题记录:SP703 SERVICE - Mobile Service

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);
		}
	}
}

考虑状态转移方程:

  1. \(a\) -> \(x_{i + 1}\)
  2. \(b\) -> \(x_{i + 1}\)
  3. \(x_i\) -> \(x_{i + 1}\)

\[f_{i + 1, x_{i}, b} = \max(f_{i + 1, x_{i}, b}, f_{i, a, b} + c(a, x_{i + 1})) \]

\[f_{i + 1, x_{i}, a} = \max(f_{i + 1, x_{i}, a}, f_{i, a, b} + c(b, x_{i + 1})) \]

\[ \]

posted @ 2024-02-18 10:26  lyfandlzf  阅读(2)  评论(0编辑  收藏  举报