题目大意:一个跳棋游戏,每置一次骰子前进相应的步数。但是有的点可以不用置骰子直接前进,求置骰子次数的平均值。

题目分析:状态很容易定义:dp(i)表示在第 i 个点出发需要置骰子的次数平均值。则状态转移方程为:

dp(i)=singma(pk*dp(i+k))+1  (如果在 i 处必须置骰子才能前进)

dp(i)=dp(s)    (如果在 i 处能直接到达s处)

代码如下:

# include<iostream>
# include<cstdio>
# include<vector>
# include<cstring>
# include<algorithm>
using namespace std; int n,m;
bool flag[100010];
double dp[100010];
vector<int>g[100010]; void init()
{
memset(dp,0,sizeof(dp));
memset(flag,false,sizeof(flag));
for(int i=0;i<=n;++i)
g[i].clear();
int x,y;
while(m--)
{
scanf("%d%d",&x,&y);
g[y].push_back(x);
}
} double solve()
{
for(int i=0;i<g[n].size();++i){
int v=g[n][i];
flag[v]=true;
}
for(int i=n-1;i>=0;--i){
if(!flag[i]){
dp[i]=1.0;
for(int j=1;j<=6;++j)
dp[i]+=dp[i+j]/6.0;
flag[i]=true;
}
for(int j=0;j<g[i].size();++j){
int v=g[i][j];
dp[v]=dp[i];
flag[v]=true;
}
}
return dp[0];
} int main()
{
while(scanf("%d%d",&n,&m)&&(n+m))
{
init();
printf("%.4lf\n",solve());
}
return 0;
}

  

最新文章

  1. Javascript常用方法函数收集(二)
  2. 在阿里云主机上基于CentOS用vsftpd搭建FTP服务器
  3. C# 复制(深拷贝、浅拷贝)
  4. HSDB
  5. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记2
  6. Spring-接口调用
  7. Shell遍历文件的每一行
  8. 图示CCScrollView的相关概念
  9. 《C/C++学习指南》 - 关于本书
  10. 如何设置Installshield中 feature的选中状态
  11. hdu1022
  12. php的八大数据类型
  13. Varnsih调用多台后端主机
  14. SpringBoot中出现的错误
  15. java ssm框架实现分页功能 (oracle)
  16. Windows XP Services
  17. FastStone Capture(FSCapture)
  18. less环境的安装与搭建
  19. Python 较为完善的猜数字游戏
  20. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

热门文章

  1. python框架(flask/django/tornado)比较
  2. Linux Lab
  3. JAVA每日一旅3
  4. initWithFrame 和 initWithCoder
  5. python解无忧公主的数学时间097.py
  6. spark1.3.1安装和集群的搭建
  7. MVP架构。。。。
  8. AudioQueue语音流 speex压缩 实时通讯 对讲机
  9. HDOJ-三部曲-1001-Flip Game
  10. 调度 Quartz 时间格式配置