LightOJ 1265 Island of Survival
2017-01-18 15:37
393 查看
期望,$dp$。
设$dp[i][j]$表示还剩下$i$只老虎,$j$只鹿的情况下,到达目标状态的期望概率。$dp[0][X]$均为$1$。因为人碰到鹿可以选择杀或者不杀,两种情况都算一下,取个$max$即可。
设$dp[i][j]$表示还剩下$i$只老虎,$j$只鹿的情况下,到达目标状态的期望概率。$dp[0][X]$均为$1$。因为人碰到鹿可以选择杀或者不杀,两种情况都算一下,取个$max$即可。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0),eps=1e-6; void File() { freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout); } template <class T> inline void read(T &x) { char c = getchar(); x = 0; while(!isdigit(c)) c = getchar(); while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); } } double dp[1005][1005]; int t,d; int main() { int T; scanf("%d",&T); int cas=1; while(T--) { scanf("%d%d",&t,&d); memset(dp,0,sizeof dp); for(int i=0;i<=d;i++) dp[0][i]=1; for(int i=1;i<=t;i++) { for(int j=0;j<=d;j++) { double ans1=0,ans2=0; if(j>=1) ans1+=1.0*i*j*dp[i][j-1]; if(j>=1) ans1+=1.0*j*dp[i][j-1]; if(i>=2) ans1+=1.0*i*(i-1)/2*dp[i-2][j]; ans1=ans1/((i+j+1)*(i+j)/2-j*(j-1)/2); if(j>=1) ans2+=1.0*i*j*dp[i][j-1]; if(i>=2) ans2+=1.0*i*(i-1)/2*dp[i-2][j]; ans2=ans2/((i+j+1)*(i+j)/2-j*(j-1)/2-j); dp[i][j]=max(ans1,ans2); } } printf("Case %d: %lf\n",cas++,dp[t][d]); } return 0; }
相关文章推荐
- runOnUiThread更新主线程
- JSP学习笔记七之Cookie
- ios10不能跳转wifi设置的解决
- JVM垃圾收集器简要概括
- Linux(Centos7)yum安装Nginx
- 决策树
- 自动化测试需要的环境变量
- Namenode HA
- Unity中调用文件选择对话框
- JSP 页面中对Cookie的操作
- piwik安装部署最佳实践
- 【java】 ClassLoader
- Jmeter性能测试实践之java请求
- golang的包管理系统比较
- SparkSql Data Sources(数据源)
- bash的基础特性二
- 解决SecureCRT无法用非root账号登录ssh
- LayoutManagerDemo:仿探探、人人影视 卡片层叠 炫动滑
- 对象的内存结构分析
- 怎么编辑pdf文件 在文件中加入二维码