ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#445 | #77. 「NOIP2016」换教室 | Pigsyy | 100 | 433ms | 70100kb | C++23 | 3.6kb | 2025-04-24 13:39:55 | 2025-04-24 13:39:56 |
answer
/*
Éèdp[i][j][0/1]±íʾǰi²½Ê¹ÓÃÁËj´ÎÉêÇëµÄ×îСÆÚÍû
×´Ì¬×ªÒÆ:
dp[i][j][0] = min(dp[i - 1][j][0] + w[c[i-1]][c[i]], dp[i - 1][j][1] + w[d[i-1]][c[i]] * (1 - p[i - 1]) + w[c[i-1]][c[i]] * p[i - 1]);
dp[i][j][1] = min(dp[i - 1][j - 1][0] + w[c[i - 1]][d[i]] * p[i] + w[c[i - 1]][c[i]] * (1 - p[i]),
dp[i - 1][j - 1][1] + w[c[i - 1]][d[i]] * (1 - p[i - 1]) * p[i] + w[d[i - 1]][d[i]] * p[i - 1] * p[i] + w[c[i - 1]][c[i]] * (1 - p[i - 1]) * (1 - p[i]) + w[d[i - 1]][c[i]] * p[i - 1] * (1 - p[i]);
´ð°¸:min(j=0->m) {dp[n][j][0], dp[n][j][1]}
ÆäÖÐwΪ×î¶Ì·
*/
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <queue>
#include <deque>
#include <cmath>
#include <vector>
#include <map>
#include <unordered_map>
#include <stack>
#include <set>
#include <bitset>
#define LL long long
#define ULL unsigned long long
#define IT set<int>::iterator
using namespace std;
const int MAXN = 2005;
int n, m, v, e, c[MAXN], d[MAXN], f[MAXN][MAXN];
double k[MAXN], dp[MAXN][MAXN][2];
int read() {
int x = 0, flag = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-')
flag = 0;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return flag ? x : -x;
}
int main() {
// freopen("classroom2.in", "r", stdin);
n = read(), m = read(), v = read(), e = read();
for (int i = 1; i <= n; ++i)
c[i] = read();
for (int i = 1; i <= n; ++i)
d[i] = read();
for (int i = 1; i <= n; ++i)
scanf("%lf", &k[i]);
for (int i = 1; i <= v; ++i)
for (int j = i + 1; j <= v; ++j)
f[i][j] = f[j][i] = 1e9; //´íÒò:³õʼ»¯¹ý´óµ¼Ö±¬int
for (int i = 1; i <= e; ++i) {
int a = read(), b = read(), w = read();
f[a][b] = f[b][a] = min(w, f[a][b]);
}
for (int k = 1; k <= v; ++k) { //floyd
for (int i = 1; i <= v; ++i) {
for (int j = i + 1; j <= v; ++j) {
if (f[i][k] + f[k][j] < f[i][j])
f[i][j] = f[j][i] = f[i][k] + f[k][j];
}
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= m; ++j) {
dp[i][j][0] = dp[i][j][1] = 2e9;
}
}
dp[1][0][0] = dp[1][1][1] = 0;
for (int i = 2; i <= n; ++i) {
for (int j = 0; j <= min(i, m); ++j) {
dp[i][j][0] = min(dp[i - 1][j][0] + f[c[i - 1]][c[i]],
dp[i - 1][j][1] + f[d[i - 1]][c[i]] * k[i - 1] + f[c[i - 1]][c[i]] * (1.0 - k[i - 1]));
// printf("%d %d 0 = min(%d + %d, %d + %lf + %lf)\n", i, j, dp[i - 1][j][0], f[c[i - 1]][c[i]], dp[i - 1][j][1], f[d[i - 1]][c[i]] * k[i - 1], f[c[i - 1]][c[i]] * (1.0 - k[i - 1]));
if (j != 0)
dp[i][j][1] = min(dp[i - 1][j - 1][0] + f[c[i - 1]][d[i]] * k[i] + f[c[i - 1]][c[i]] * (1.0 - k[i]),
dp[i - 1][j - 1][1] + f[c[i - 1]][d[i]] * (1.0 - k[i - 1]) * k[i] + f[d[i - 1]][d[i]] * k[i - 1] * k[i] +
f[c[i - 1]][c[i]] * (1.0 - k[i - 1]) * (1.0 - k[i]) + f[d[i - 1]][c[i]] * k[i - 1] * (1.0 - k[i]));
// printf("%d %d:%lf %lf\n", i, j, dp[i][j][0], dp[i][j][1]);
}
}
double ans = 2e9;
for (int i = 0; i <= m; ++i)
ans = min(ans, min(dp[n][i][0], dp[n][i][1]));
printf("%.2lf\n", ans);
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 4
Accepted
time: 33ms
memory: 7724kb
input:
1 1 300 34973 104 141 0.095 223 87 44 201 240 79 223 296 25 119 276 50 161 291 40 247 230 49 163 52 ...
output:
0.00
result:
ok "0.00"
Test #2:
score: 4
Accepted
time: 2ms
memory: 5552kb
input:
2 0 20 32 7 11 5 17 0.066 0.825 9 13 29 1 2 54 7 6 70 3 10 34 8 7 26 1 3 63 8 17 89 6 9 27 2 3 89 8 ...
output:
39.00
result:
ok "39.00"
Test #3:
score: 4
Accepted
time: 7ms
memory: 7460kb
input:
2 1 100 1955 73 22 82 58 0.027 0.679 81 46 71 46 35 35 42 66 2 13 87 92 49 16 57 99 28 76 26 66 70 9...
output:
21.97
result:
ok "21.97"
Test #4:
score: 4
Accepted
time: 32ms
memory: 9840kb
input:
2 2 300 5205 176 285 30 173 0.891 0.606 25 300 54 21 241 99 72 234 23 140 13 30 278 148 38 191 209 5...
output:
16.70
result:
ok "16.70"
Test #5:
score: 4
Accepted
time: 2ms
memory: 5420kb
input:
3 0 20 207 18 3 2 14 16 10 1.000 1.000 1.000 7 19 18 4 5 14 6 16 21 10 20 24 11 20 22 2 13 17 3 13 1...
output:
22.00
result:
ok "22.00"
Test #6:
score: 4
Accepted
time: 2ms
memory: 5620kb
input:
3 1 100 5053 42 32 38 22 56 84 0.726 0.836 0.557 46 87 7 94 96 7 42 61 15 2 98 7 2 56 7 39 74 7 19 9...
output:
8.55
result:
ok "8.55"
Test #7:
score: 4
Accepted
time: 40ms
memory: 9660kb
input:
3 2 300 26445 258 276 100 228 93 148 0.743 0.470 0.811 236 266 8 108 107 13 237 143 83 137 218 75 15...
output:
12.65
result:
ok "12.65"
Test #8:
score: 4
Accepted
time: 32ms
memory: 9860kb
input:
10 0 300 72330 40 196 13 76 218 36 256 70 20 240 194 35 235 2 89 164 147 149 230 17 1.000 1.000 1.00...
output:
36.00
result:
ok "36.00"
Test #9:
score: 4
Accepted
time: 2ms
memory: 5764kb
input:
10 1 20 228 6 6 13 13 6 17 2 1 7 2 3 3 8 20 11 7 10 14 17 13 0.556 0.419 0.872 0.751 0.185 0.311 0.7...
output:
123.20
result:
ok "123.20"
Test #10:
score: 4
Accepted
time: 6ms
memory: 5436kb
input:
10 2 100 3362 49 47 85 96 10 38 78 96 65 20 72 45 45 37 27 32 54 30 90 36 0.420 0.419 0.091 0.417 0....
output:
111.14
result:
ok "111.14"
Test #11:
score: 4
Accepted
time: 25ms
memory: 7504kb
input:
10 3 300 10448 118 253 187 170 280 86 101 293 59 9 212 31 73 83 107 21 143 179 251 285 1.000 1.000 1...
output:
84.00
result:
ok "84.00"
Test #12:
score: 4
Accepted
time: 0ms
memory: 7604kb
input:
20 0 20 190 17 6 7 6 5 5 14 7 10 9 1 10 18 10 20 2 3 2 6 10 15 2 9 12 4 3 5 4 4 16 7 6 15 2 8 19 9 4...
output:
449.00
result:
ok "449.00"
Test #13:
score: 4
Accepted
time: 4ms
memory: 7668kb
input:
20 1 100 1156 93 31 21 74 7 39 80 87 1 24 5 33 57 77 11 86 91 3 51 58 50 78 92 52 60 81 65 2 62 4 47...
output:
518.22
result:
ok "518.22"
Test #14:
score: 4
Accepted
time: 29ms
memory: 7872kb
input:
20 2 300 45731 196 94 33 194 246 209 11 168 104 199 106 252 213 236 111 166 197 243 268 124 230 293 ...
output:
73.91
result:
ok "73.91"
Test #15:
score: 4
Accepted
time: 25ms
memory: 7868kb
input:
20 4 300 329 265 8 123 159 206 98 111 1 153 288 38 48 154 105 174 290 208 98 115 230 170 36 267 28 5...
output:
5635.00
result:
ok "5635.00"
Test #16:
score: 4
Accepted
time: 2ms
memory: 16160kb
input:
300 0 20 20 7 7 19 7 5 5 3 14 19 7 12 20 19 9 11 20 12 2 9 18 16 11 19 7 13 19 4 15 8 10 20 7 18 16 ...
output:
58437.00
result:
ok "58437.00"
Test #17:
score: 4
Accepted
time: 5ms
memory: 15840kb
input:
300 1 100 807 40 36 9 23 17 21 26 2 75 34 76 13 62 9 31 40 91 31 40 72 71 80 58 79 52 100 14 46 27 7...
output:
9485.90
result:
ok "9485.90"
Test #18:
score: 4
Accepted
time: 29ms
memory: 17884kb
input:
300 2 300 73441 125 217 217 229 274 51 203 73 215 89 241 110 204 148 109 296 101 104 75 26 9 22 66 8...
output:
1275.00
result:
ok "1275.00"
Test #19:
score: 4
Accepted
time: 28ms
memory: 17900kb
input:
300 29 300 916 194 216 47 54 69 245 68 88 37 66 91 110 186 43 153 248 140 287 278 281 293 182 182 19...
output:
26494.00
result:
ok "26494.00"
Test #20:
score: 4
Accepted
time: 5ms
memory: 65340kb
input:
2000 0 20 73 16 11 3 6 2 15 2 16 19 17 10 18 9 9 10 3 7 18 12 15 19 5 2 15 11 5 15 5 13 18 18 12 9 1...
output:
90864.00
result:
ok "90864.00"
Test #21:
score: 4
Accepted
time: 3ms
memory: 66996kb
input:
2000 1 20 21 19 6 7 18 1 5 13 17 14 12 11 17 5 16 10 3 14 19 1 1 8 5 13 11 18 13 17 16 1 18 9 1 3 5 ...
output:
266618.33
result:
ok "266618.33"
Test #22:
score: 4
Accepted
time: 4ms
memory: 67196kb
input:
2000 2 100 1730 65 5 92 90 3 34 74 10 40 76 33 59 36 82 42 30 75 79 27 32 10 4 88 23 44 49 62 50 46 ...
output:
30065.03
result:
ok "30065.03"
Test #23:
score: 4
Accepted
time: 21ms
memory: 67360kb
input:
2000 300 100 4264 75 90 30 46 84 80 66 17 13 67 68 80 3 95 41 6 62 99 74 61 82 24 66 19 97 73 96 64 ...
output:
14299.96
result:
ok "14299.96"
Test #24:
score: 4
Accepted
time: 40ms
memory: 69848kb
input:
2000 810 300 26536 282 149 255 118 193 88 228 11 51 150 70 282 147 50 41 234 243 279 272 92 52 203 2...
output:
10027.98
result:
ok "10027.98"
Test #25:
score: 4
Accepted
time: 55ms
memory: 70100kb
input:
2000 1889 300 33193 288 140 179 122 3 196 289 5 89 34 72 53 58 36 240 194 55 59 38 124 254 183 14 22...
output:
9480.63
result:
ok "9480.63"