ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5.24考试总结

2021-05-26 12:35:43  阅读:158  来源: 互联网

标签:总结 loc head nex int 5.24 20001 101 考试


带着爆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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有