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 成文


posted @ 2022-01-15 14:36  hh2048  阅读(99)  评论(0编辑  收藏  举报