icpc:problems:luogup3399
problems | |
---|---|
名称 | 丝绸之路 |
题目编号 | P3399 |
题目链接 | luogu.com.cn/… |
来源 | Luogu |
算法分类 | 动态规划, 线性动态规划 |
难易程度 | 容易 |
丝绸之路
想法
设立f[i][j]表示在第j天到第i个地方的最小疲劳。每次转移只需要转移前j天中最小的疲劳即可。
代码实现
#include <cstdio> #include <cstring> const int N = 1010; int d[N], c[N], f[N][N]; int main() { memset(f, 0x7f, sizeof(f)); int n, m; scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) scanf("%d", &d[i]); for (int i = 1; i <= m; i++) scanf("%d", &c[i]); for (int i = 0; i <= m; i++) f[0][i] = 0; for (int i = 1; i <= n; i++) { int mi = f[i - 1][i - 1]; for (int j = i; j <= m; j++) { if (f[i - 1][j - 1] < mi) mi = f[i - 1][j - 1]; f[i][j] = mi + c[j] * d[i]; } } int ans = f[n][n]; for (int i = n + 1; i <= m; i++) if (f[n][i] < ans) ans = f[n][i]; printf("%d", ans); return 0; }
/app/www/public/data/pages/icpc/problems/luogup3399.txt · 最后更改: 2024/03/23 16:04 由 温婕莺