期望DP

本题递推比较麻烦,可以记忆化搜索

注意搜索的边界条件

以及每一次转移

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
double dp[16][16][16][16][6][6];
bool f[16][16][16][16][6][6];
int term[4];
double dfs(int a, int b, int c, int d, int p, int q) {
if(f[a][b][c][d][p][q]) return dp[a][b][c][d][p][q];
f[a][b][c][d][p][q] = 1;
double & ans = dp[a][b][c][d][p][q];ans = 0.0;
int r1 = a, r2 = b, r3 = c, r4 = d;
if(p == 1) r1++; if(p == 2) r2++; if(p == 3) r3++; if(p == 4) r4++;
if(q == 1) r1++; if(q == 2) r2++; if(q == 3) r3++; if(q == 4) r4++;
if(r1 >= term[0] && r2 >= term[1] && r3 >= term[2] && r4 >= term[3]) return ans = 0;
int sum = 54 - r1 - r2 - r3 - r4;
if(sum <= 0) return ans = 1e10;
if(a < 13) ans += dfs(a + 1, b, c, d, p, q) * (13 - a) /sum;
if(b < 13) ans += dfs(a, b + 1, c, d, p, q) * (13 - b) /sum;
if(c < 13) ans += dfs(a, b, c + 1, d, p, q) * (13 - c) /sum;
if(d < 13) ans += dfs(a, b, c, d + 1, p, q) * (13 - d) /sum;
if(!p) {
double tmp = dfs(a, b, c, d, 1, q);
tmp = min(tmp, dfs(a, b, c, d, 2, q));
tmp = min(tmp, dfs(a, b, c, d, 3, q));
tmp = min(tmp, dfs(a, b, c, d, 4, q));
ans += tmp / sum;
}
if(!q) {
double tmp = dfs(a, b, c, d, p, 1);
tmp = min(tmp, dfs(a, b, c, d, p, 2));
tmp = min(tmp, dfs(a, b, c, d, p, 3));
tmp = min(tmp, dfs(a, b, c, d, p, 4));
ans += tmp / sum;
}
ans += 1.0;//概率和是 1 ,所以我们直接加 1 即可
return ans;
}
int main() {
for(int i = 0; i < 4; i++) cin >> term[i];
double ans = dfs(0, 0, 0, 0, 0, 0);
if(ans >= 100.0) printf("-1.000\n");
else printf("%.3f\n", ans);
return 0;
}

最新文章

  1. 集合的扩展方法ForEach的使用
  2. Threading in C#
  3. el表达式获取cookie
  4. CentOS 6.3 源码安装LAMP(Linux+Apache+Mysql+Php)环境
  5. APMServ—我用过的最优秀的PHP集成环境工具
  6. 第二次作业-关于Steam游戏平台的简单分析
  7. day13
  8. 从零开始在iPhone上运行视频流实时预测模型应用,只需10步
  9. okHttp超时报错解决方案
  10. CF367C. Hard problem
  11. vue-cli webpack 全局引用jquery
  12. [AWS] Deploy react project on EC2
  13. Prometheus监控学习笔记之教程推荐
  14. [leetcode]123. Best Time to Buy and Sell Stock III 最佳炒股时机之三
  15. 12、利用docker快速搭建Wordpress网站
  16. Tomcat源码学习(1)
  17. Selenium2+python自动化48-登录方法(参数化)
  18. samba安装测试
  19. django基础复习
  20. Centos7 下安装以及使用mssql

热门文章

  1. PAT (Basic Level) Practise (中文)-1020. 月饼 (25)
  2. C#语言命名的9种规范
  3. 遍历Map的两种方式
  4. untiy3d action管理机制的编写
  5. MySQL查询显示连续的结果
  6. pm2日志记录和日志分割
  7. 02 Django框架基础(APP的创建访问)
  8. gulp的安装和使用
  9. centos7 安装显卡驱动方法
  10. POJ2239二分匹配