2 条题解
-
0
AC代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 255; const int INF = 1e9; int n, T, t[maxn], m1, d[maxn], m2, e[maxn]; int f[maxn][maxn]; bool tl[maxn][maxn], tr[maxn][maxn]; void init() { for (int i = 1; i <= n; i++) for (int j = 0; j <= T; j++) f[i][j] = INF, tl[i][j] = tr[i][j] = 0; f[1][0] = 0; } int main() { for (int cas = 1; ; cas++) { scanf("%d", &n); if (!n) break; scanf("%d", &T); for (int i = 1; i < n; i++) scanf("%d", t+i); scanf("%d", &m1); for (int i = 1; i <= m1; i++) scanf("%d", d+i); scanf("%d", &m2); for (int i = 1; i <= m2; i++) scanf("%d", e+i); init(); for (int i = 1; i <= m1; i++) { int x = d[i]; tr[1][x] = true; for (int j = 2; j <= n; j++) { x += t[j-1]; if (x > T) break; tr[j][x] = true; } } for (int i = 1; i <= m2; i++) { int x = e[i]; tl[n][x] = true; for (int j = n-1; j >= 1; j--) { x += t[j]; if (x > T) break; tl[j][x] = true; } } for (int j = 0; j < T; j++) { for (int i = 1; i <= n; i++) { if (f[i][j] == INF) continue; f[i][j+1] = min(f[i][j+1], f[i][j] + 1); if (i < n && tr[i][j]) { int y = j + t[i]; if (y <= T) f[i+1][y] = min(f[i+1][y], f[i][j]); } if (i > 1 && tl[i][j]) { int y = j + t[i-1]; if (y <= T) f[i-1][y] = min(f[i-1][y], f[i][j]); } } } if (f[n][T] == INF) printf("Case Number %d: impossible\n", cas); else printf("Case Number %d: %d\n", cas, f[n][T]); } return 0; } -
0
错误代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 255; const int INF = 1e9; int n, T, t[maxn], m1, d[maxn], m2, e[maxn]; int f[maxn][maxn]; bool tl[maxn][maxn], tr[maxn][maxn]; void init() { for (int i = 1; i <= n; i++) for (int j = 0; j <= T; j++) f[i][j] = INF, tl[i][j] = tr[i][j] = 0; f[1][0] = 0; } int main() { for (int cas = 1; ; cas++) { scanf("%d", &n); if (!n) break; scanf("%d", &T); for (int i = 1; i < n; i++) scanf("%d", t+i); scanf("%d", &m1); for (int i = 1; i <= m1; i++) scanf("%d", d+i); scanf("%d", &m2); for (int i = 1; i <= m2; i++) scanf("%d", e+i); init(); for (int i = 1; i <= m1; i++) { int x = d[i]; tr[1][x] = true; for (int j = 2; j <= n; j++) { x += t[j-1]; if (x > T) break; tr[j][x] = true; } } for (int i = 1; i <= m2; i++) { int x = e[i]; tl[n][x] = true; for (int j = n-1; j >= 1; j--) { x += t[j]; if (x > T) break; tl[j][x] = true; } } for (int j = 0; j < T; j++) { for (int i = 1; i <= n; i++) { if (f[i][j] == INF) continue; f[i][j+1] = min(f[i][j+1], f[i][j] + 1); if (i < n && tr[i][j]) { int y = j + t[i]; if (y <= T) f[i+1][y] = min(f[i+1][y], f[i][j]); } if (i > 1 && tr[i][j]) { int y = j + t[i-1]; if (y <= T) f[i-1][y] = min(f[i-1][y], f[i][j]); } } } if (f[n][T] == INF) printf("Case Number %d: impossible\n", cas); else printf("Case Number %d: %d\n", cas, f[n][T]); } return 0; }
- 1
信息
- ID
- 19
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 9
- 已通过
- 3
- 上传者