CF1625C - Road Optimization(动态规划 / 省选级)
1625C - Road Optimization(源地址自⇔CF1625C)
tag
⇔动态规划、⇔省选级(*1700)
题意
一条马路上有 \(n\) 个限速牌,所位于的位置通过 \(d[1...n]\) 数组给出,限速多少通过 \(a[1...n]\) 给出。现在,你至多可以移除 \(k\) 个限速牌,请你找出通过这条马路所需要花费的最少时间。
思路
自己方法
使用运筹学的方式解释样例二:
首先假设四个阶段 \(i\) 为到第 \(i\) 块牌子所需要的最短时间,假设 \(j\) 为这一阶段路上剩余限速牌的数量(显然, \(j \le i\) )。建立表格如下:
我们发现,出了剩余标志数量为 \(1\) 的情况外,其他情况均有一致的转移方程。
Jiangly做法
Tourist做法(有直播讲解)
AC代码1(自己方法)
点击查看代码
void Solve() {
LL n, l, k;
cin >> n >> l >> k;
ms(dp, MAX9);
FOR(i, 1, n) cin >> d[i];
d[n + 1] = l;
FOR(i, 1, n) cin >> a[i];
FOR(i, 1, n) {
dp[i][1] = (d[i + 1] - d[1]) * a[1];
FOR(j, 2, n) {
FOR(q, 1, i - 1) {
dp[i][j] = min(dp[i][j], dp[q][j - 1] + (d[i + 1] - d[q + 1]) * a[q + 1]);
}
}
}
ans = 0x3f3f3f3f;
FOR(i, n - k, n) ans = min(ans, dp[n][i]);
cout << ans << endl;
}
错误次数
无
文 / WIDA
2022.01.15 成文
首发于WIDA个人博客,仅供学习讨论
更新日记:
2022.01.15 成文