其他分享
首页 > 其他分享> > 5.24考试总结

5.24考试总结

作者:互联网

带着爆0的心态考的试,没想到整了个假rk2 (炸鱼大佬wtz忒强了OTZ


 T1 景区路线规划

这题对刚学完概率期望的我来说简直水爆了好吗。。

因为存在时间限制,不好跑高斯消元,就直接跑dp就完了。

令i为当前所在景点,j为已过时间,

f[i][j]=∑f[u][j-t[k]-c[i]]/out,(u与i联通,k为u,i,之间边的编号)

因为每次在合法的景点中做选择,所以out并不是u的出度,而是u可选的合法景点,每次要遍历一遍求得。

code:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,k,st[20001],to[20001],nex[20001],head[101],c[101],t[20001],h1[101],h2[101];
 4 double f1[101][481],f2[101][481],ans1,ans2;
 5 inline void add(int a,int b,int e,int d)
 6 {
 7     st[d]=a;    to[d]=b;    nex[d]=head[a];        head[a]=d;        t[d]=e;
 8     st[d+m]=b;    to[d+m]=a;    nex[d+m]=head[b];    head[b]=d+m;    t[d+m]=e;
 9 }
10 inline double dfs1(int loc,int tim)
11 {
12     if(f1[loc][tim])    return f1[loc][tim];
13     int out=0;
14     for(int i=head[loc];i;i=nex[i])
15     {
16         int v=to[i];
17         if(tim+t[i]+c[v]<=k)    out++;
18     }
19     f1[loc][tim]=h1[loc];
20     if(!out)    return f1[loc][tim];
21     for(int i=head[loc];i;i=nex[i])
22     {
23         int v=to[i];
24         if(tim+t[i]+c[v]<=k)    
25             f1[loc][tim]+=dfs1(v,tim+t[i]+c[v])/out;
26     }
27     return f1[loc][tim];
28 }
29 inline double dfs2(int loc,int tim)
30 {
31     if(f2[loc][tim])    return f2[loc][tim];
32     int out=0;
33     for(int i=head[loc];i;i=nex[i])
34     {
35         int v=to[i];
36         if(tim+t[i]+c[v]<=k)    out++;
37     }
38     f2[loc][tim]=h2[loc];
39     if(!out)    return f2[loc][tim];
40     for(int i=head[loc];i;i=nex[i])
41     {
42         int v=to[i];
43         if(tim+t[i]+c[v]<=k)    
44             f2[loc][tim]+=dfs2(v,tim+t[i]+c[v])/out;
45     }
46     return f2[loc][tim];
47 }
48 int main()
49 {
50     scanf("%d%d%d",&n,&m,&k);
51     for(int i=1;i<=n;i++)
52         scanf("%d%d%d",&c[i],&h1[i],&h2[i]);
53     for(int i=1;i<=m;i++)
54     {
55         int x,y,z;
56         scanf("%d%d%d",&x,&y,&z);
57         add(x,y,z,i);
58     }
59     for(int i=1;i<=n;i++)
60     {
61         ans1+=dfs1(i,c[i]);    
62         ans2+=dfs2(i,c[i]);
63     }
64     ans1/=n;    ans2/=n;
65     printf("%.5lf %.5lf",ans1,ans2);
66     return 0;
67 }
T1

 

 

 

标签:总结,loc,head,nex,int,5.24,20001,101,考试
来源: https://www.cnblogs.com/keeeeeeen/p/14812891.html