• G - Damaged Bicycle 状压+最短路,D-七圣召唤_概率dp


    G - Damaged Bicycle 状压+最短路

    最短路处理出1号节点和带车子的点到n的距离dist[x][n],G可以从节点1直接走到n,也可以从节点1走到带车子的节点再骑到n,如果车子坏了可以走到n,也可以走到下一个车子节点再进行之前的步骤,所以可以记忆化搜索一下,dp[sta][x],sta表示走了几个关键点,是一个压缩的二进制,x是当前的关键点,转移就是

    dp[sta][x]=min(dp[sta][x],1.0*(1-p[x])*dist[x][n]/r+p[x]*(1.0*dist[x][a[i]]/t+dfs(sta|(1<

    该点的车子没坏的期望加上坏了走到下一个关键点的期望

    【超好懂的比赛题解】2021CCPC哈尔滨站 个人题解_RWLinno的博客-CSDN博客

    1. #include
    2. #define int long long
    3. #define endl '\n'
    4. #define pause system("pause")
    5. using namespace std;
    6. const int N=1e6+5;
    7. const int inf=1e18;
    8. double t,r;
    9. int n,m,head[N],cnt,k,a[22];
    10. struct Edge
    11. {
    12. int next,to;
    13. int w;
    14. }e[N];
    15. void addedge(int from,int to,int w)
    16. {
    17. e[++cnt].next=head[from];
    18. e[cnt].to=to;
    19. e[cnt].w=w;
    20. head[from]=cnt;
    21. }
    22. int vis[N],dist[22][N];
    23. double dp[N][22],p[22];
    24. struct node
    25. {
    26. int id,dis;
    27. bool operator<(const node &a)const
    28. {
    29. return a.dis
    30. }
    31. };
    32. void dij(int s,int num)
    33. {
    34. for(int i=1;i<=n;i++) vis[i]=0,dist[num][i]=inf;
    35. dist[num][s]=0;
    36. priority_queueq;
    37. q.push(node{s,0});
    38. while(!q.empty())
    39. {
    40. node u=q.top();q.pop();
    41. int now=u.id;
    42. double dis=u.dis;
    43. if(vis[now]) continue;
    44. vis[now]=1;
    45. for(int i=head[now];i;i=e[i].next)
    46. {
    47. int j=e[i].to;
    48. if(dist[num][now]+e[i].w
    49. {
    50. dist[num][j]=dist[num][now]+e[i].w;
    51. if(!vis[j]) q.push(node{j,dist[num][j]});
    52. }
    53. }
    54. }
    55. }
    56. double dfs(int sta,int x)
    57. {
    58. if(dp[sta][x]) return dp[sta][x];
    59. double res=1.0*p[x]*dist[x][n]/t+(1.0-p[x])*dist[x][n]/r;
    60. for(int i=1;i<=k;i++)
    61. {
    62. if((sta>>i-1)&1) continue;
    63. res=min(res,1.0*(1-p[x])*dist[x][n]/r+p[x]*(1.0*dist[x][a[i]]/t+dfs(sta|(1<-1),i)));
    64. }
    65. return dp[sta][x]=res;
    66. }
    67. signed main()
    68. {
    69. ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    70. cin>>t>>r>>n>>m;
    71. for(int i=1;i<=m;i++)
    72. {
    73. int u,v;double w;
    74. cin>>u>>v>>w;
    75. addedge(u,v,w);
    76. addedge(v,u,w);
    77. }
    78. cin>>k;
    79. a[0]=1;p[0]=1;
    80. for(int i=1;i<=k;i++)
    81. {
    82. cin>>a[i]>>p[i];
    83. p[i]/=100.0;
    84. }
    85. for(int i=0;i<=k;i++) dij(a[i],i);
    86. double ans=dfs(0,0);
    87. if(dist[0][n]>=inf) cout<<"-1\n";
    88. else cout<setprecision(10)<
    89. pause;
    90. return 0;
    91. }

    D-七圣召唤_概率dp

    第一个设dp[i]为抽到i种卡片需要的期望次数,显然dp[1]=1,然后

    dp[i]=\frac{i-1}{k}dp[i]+\frac{k-i+1}{k}dp[i-1]+1

    意思就是有\frac{i-1}{k}的概率是抽到已经抽到的牌,那么需要求的期望还是不变的,还是需要dp[i]来转移,有\frac{k-i-1}{k}的概率是抽到没抽到的牌,那么就可以由dp[i-1]来转移

    第二个答案f[i],可以理解成f[i]=(k-f[i-1])/k+f[i-1],在i-1次的基础上加上这一次成功的概率,应该说是期望,理解是价值为1,所以就直接加上了

    2022 年辽宁省大学生程序设计竞赛 个人题解_RWLinno的博客-CSDN博客_辽宁省程序设计大赛

    1. #include
    2. #define int long long
    3. #define endl '\n'
    4. #define pause system("pause")
    5. using namespace std;
    6. const int N=1e6+5;
    7. const int inf=1e18;
    8. int n,k;
    9. double qpow(double a,int b)
    10. {
    11. double res=1.0;
    12. while(b)
    13. {
    14. if(b&1) res=res*a;
    15. a=a*a;
    16. b>>=1;
    17. }
    18. return res;
    19. }
    20. double dp[N],f[N];
    21. signed main()
    22. {
    23. //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    24. cin>>n>>k;
    25. dp[0]=0;dp[1]=1;
    26. for(int i=2;i<=k;i++)
    27. {
    28. dp[i]=(1.0*(k-i+1)*dp[i-1]/k+1.0)*k/(k-i+1);
    29. //cout<
    30. }
    31. f[0]=0;f[1]=1;
    32. for(int i=2;i<=n;i++)
    33. f[i]=f[i-1]+1.0*(k-f[i-1])/k;
    34. cout<setprecision(10)<" "<
    35. pause;
    36. return 0;
    37. }

  • 相关阅读:
    Day48——前端知识CSS
    相机标定:理论与实践
    Bert基础(十六)--Bert实战:中文文本分类任务-- transformers库实现
    MyBatis-PLUS使用教程
    非零基础自学Java (老师:韩顺平) 第7章 面向对象编程(基础部分) 7.7 作用域
    1041 考试座位号 (分数 15)【C++】
    图解kmp算法
    Java基础复习 Day 20
    第十章 数据库恢复技术
    HTML期末大学生网页设计作业——奇恩动漫HTML (1页面) HTML+CSS+JS网页设计期末课程大作业
  • 原文地址:https://blog.csdn.net/weixin_52621204/article/details/127862359