Bad Luck Island-CodeForce(dp)
2015-11-20 20:52
197 查看
链接:http://codeforces.com/problemset/problem/540/D
题目大意:
这个岛上有三种生物 r石头 s剪刀 p布
求最后只剩一种生物的概率
用dp[i][j][k]表示概率
石头和剪刀相遇的概率是p=i*j/(i*j+j*k+k*i),剪刀会被吃掉 所以dp[i][j-1][k]=dp[i][j][k]*p;每一种情况都会有三种情况演变过来的,所以每次都要加上他
上代码 应该看代码就能看懂
题目大意:
这个岛上有三种生物 r石头 s剪刀 p布
求最后只剩一种生物的概率
用dp[i][j][k]表示概率
石头和剪刀相遇的概率是p=i*j/(i*j+j*k+k*i),剪刀会被吃掉 所以dp[i][j-1][k]=dp[i][j][k]*p;每一种情况都会有三种情况演变过来的,所以每次都要加上他
上代码 应该看代码就能看懂
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<iostream> #include<queue> #define N 110 using namespace std; double dp ; int main() { int r,s,p,i,j,k; while(scanf("%d %d %d",&r,&s,&p)!=EOF) { memset(dp,0,sizeof(dp)); dp[r][s][p]=1.0; for(i=r;i>=0;i--) { for(j=s;j>=0;j--) { for(k=p;k>=0;k--) { double sum=i*j+j*k+k*i; if(i && k) dp[i-1][j][k]+=dp[i][j][k]*i*k*1.0/sum; if(j && i) dp[i][j-1][k]+=dp[i][j][k]*i*j*1.0/sum; if(k && j) dp[i][j][k-1]+=dp[i][j][k]*k*j*1.0/sum; } } } double x=0,y=0,z=0; for(i=r;i>0;i--) x+=dp[i][0][0]; for(i=s;i>0;i--) y+=dp[0][i][0]; for(i=p;i>0;i--) z+=dp[0][0][i]; printf("%.12lf %.12lf %.12lf\n",x,y,z); } return 0; }
相关文章推荐
- Struts登录
- 项目回顾(ios搜索功能的实现)
- 小米推送服务iOS客户端SDK使用指南
- 创建2个线程及一个主线程
- 基于v4l2的webcam应用, 本地预监
- 信息安全系统设计基础第11周学习总结
- 一种美-无法言语
- QtCreator支持C++11的设置方法
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- MPMediaPlayerController
- Codeforces 407 A. Triangle 【Codeforces Round #239 (Div. 1)】
- 基于S3C2440的Linux-3.6.6移植——基于UVC的USB摄像头移植及视频显示
- 内存拷贝函数的实现
- 不使用border-radius实现圆角框
- Android自定义控件:将ViewPager封装自己的TabPager控件
- 上线流程
- 上线审核规则
- Servlet学习-开篇
- lwip网络接口netif
- 远程监控系统项目总结