Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#445#77. 「NOIP2016」换教室Pigsyy100433ms70100kbC++233.6kb2025-04-24 13:39:552025-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"