一开始用了模拟的方法,DFS来搜索,但是因为当n很大的时候有很多的重复计算,因为会踏过重复的点进行重复的操作,而且不能不走这些重复的路径,因为没有存储结果,最后只过了三个点。

考虑到重复的路径,所以想到利用动态规划。

可以认为dp[i][j]表示的是 从左上角开始走,走出以(1,1)到(i,j)为两个端点的棋盘中拿到牙签袋的期望。

画图可以知道,因为每次都是斜向下走。走出 i,j棋盘,可以是先走出比这个棋盘小的36种小棋盘的任何一种,然后再吃到在小棋盘和i,j中的某一个,拿到的牙签期望。

(如果走出了一个小棋盘,还可以再出大棋盘之前吃两个的话,这种情况已经被在其他的小棋盘(比前面说的小棋盘大一点)算过了,所以不用考虑)

所以这样的话就是

dp[i][j] = E {(dp[i-t][j-k]+1) * 1 / 36} ; t,k从1到6 E表示求和

注意这里需要处理一下就是因为i-t和j-k有可能不存在,所以dp是0,但是这样会丢失分子的1,

所以先把36个36分之1从求和中拿出来。

得到最后的公式就是

dp[i][j] = E{ (dp[i-t][j-k]) * 1 / 36}  + 1;

代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;double p = 1.0/36;
double dp[1000+10][1000+10];int main(int argc, char const *argv[])
{//DP过程int n;cin>>n;//以此更新每个点for (int i = 1; i <=n; ++i){for (int j=1; j <=n; ++j){dp[i][j] = 0.0;//从36个小棋盘中跨越出来 for (int dx = 1; dx <=6 ; ++dx){for (int dy=1; dy <= 6; ++dy){if(i-dx>=1 and j-dy>=1)dp[i][j] += dp[i-dx][j-dy]/36;}}dp[i][j]+=1.0;}}printf("%.2f\n", dp[n][n] );return 0;
}

转载于:https://www.cnblogs.com/yuchenlin/p/sjtu_oj_1390.html

【算法学习笔记】75. 动态规划 棋盘型 期望计算 1390 畅畅的牙签盒(改)相关推荐

  1. 算法学习笔记----用动态规划解决钢管切割问题

    (说明:由于CSDN的博客中不能添加下标等特殊符号,所以部分内容使用截图的形式) 通过对问题进行高度抽象,现在我们的问题,就是要递归地求解r n 的最大值,下面采用的是一种自顶向下的递归方法: int ...

  2. 【算法学习笔记】67.状态压缩 DP SJTU OJ 1383 畅畅的牙签袋

    思想来自:http://blog.pureisle.net/archives/475.html 主要思想是用1和0来表示是否被填,然后根据两行之间的状态关系来构建DP方程. 1.首先初始化第一行 计算 ...

  3. 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列

    (为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...

  4. 波束形成算法学习笔记之一(Endfire,broadside)

    波束形成算法学习笔记 Broadside 结构 特点 空间响应(频率变化) 频率响应(角度变化) Endfire结构 特点 空间响应(频率变化) 空间响应(延迟变化) 频率响应(角度变化) 总结 麦克 ...

  5. Python最优化算法学习笔记(Gurobi)

    微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...

  6. 基于MVS的三维重建算法学习笔记(四)— 立体匹配经典算法Semi-Global Matching(SGM)论文翻译及要点解读

    基于MVS的三维重建算法学习笔记(四)- 立体匹配经典算法Semi-Global Matching(SGM)论文翻译及要点解读 声明 SGM概述 Cost Calculation(像素代价计算)--M ...

  7. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  8. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  9. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

最新文章

  1. 指纹浏览器 开源 linux,浏览器指纹--Canvas指纹
  2. TensorFlow 完整的TensorFlow入门教程
  3. 【深入Java虚拟机JVM 06】垃圾收集概述
  4. java制作oracle程序,Java程序操作Oracle两种方式之简单实现
  5. 用计算机绘画教学反思,《电脑绘画》教学反思2篇
  6. html5执行shell,利用nginx执行Shell 脚本
  7. 计算机没有显示光盘图标,电脑光驱图标不见了怎么办
  8. .nav ul .mall a:hover是什么意思
  9. 微信拉黑和删好友,哪个更绝情?
  10. 创建easyui的右键菜单(onRowContextMenu)
  11. python请输入一个人的名字_print('曾经有一份真挚的爱情放在我面前,那个人的名字是' + goddess),Python旅程开始的地方!...
  12. python读取webp格式图像
  13. 鲁宾逊微积分教材版权的“知识共享”授权方式
  14. [笔记]n个点的基环树数量
  15. opencv python gpu加速_OpenCV中配置CUDA,实现GPU加速
  16. ZYNQ 之PS 和PL 互联技术之AXI
  17. 解决string not in pwd
  18. 整理任正非思想:要建立一个均衡的平台-1995
  19. allegro生成不规则钻孔 .rou
  20. 一个屌丝程序猿的人生(一百零六)

热门文章

  1. C语言——分支语句和循环语句(分支语句)
  2. 书终于出来了:《Unity3D平台AR与VR开发快速上手》
  3. 冒泡排序和纯指针的冒泡排序
  4. 为什么电脑计算机里没有桌面,为什么电脑开机后桌面上什么都没有?
  5. thinkphp6 通过命令行快速生成多应用模块报 【Command “build“ is not defined.】错误的解决办法
  6. “x经济”的2021:Z世代成价值载体,增量发掘与存量博弈共存
  7. 华为交换机Hybrid接口
  8. 交通行业服务器操作系统加固报价,加固清单报价实例
  9. 系统迁移后无法正常开机相关心得
  10. 【ZZULIOJ】1001: 植树问题