51nod 1450 闯关游戏——期望dp

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450

想了半天,不知道不能走的状态(即最后不足m个的状态)怎么办。去吃晚饭的路上想到那种也是转移到 f[ i ][ j ] 自己,因为意义是需要再来一次,状态没有前进。

想出那个之前稍微看了点题解,不过只看到需要按 y 排序。若非此自己可能还想不到要排序。还对拍验证了一下,确实有差异。

把 y 大的排在前面,x 值大是第二关键字。之所以排在前面,是因为前面的影响更大(即使是倒着推的),就想搜索的时候把分叉少的排在前面一样。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define db double
using namespace std;
const int N=2005; const db INF=0x3f3f3f3f;
int n,m;
db f[N][N<<1];
struct Node{
  db x,y,z;
}a[N];
bool cmp(Node u,Node v){return u.y==v.y?u.x<v.x:u.y<v.y;}
int rdn()
{
  int ret=0,fx=1; char ch=getchar();
  while(ch>‘9‘||ch<‘0‘){ if(ch==‘-‘) fx=-1; ch=getchar();}
  while(ch>=‘0‘&&ch<=‘9‘) ret=(ret<<3)+(ret<<1)+ch-‘0‘,ch=getchar();
  return ret;
}
int main()
{
  //  freopen("51nod1450-data.in","r",stdin);
  //  freopen("51nod1450-bl.out","w",stdout);
  n=rdn(); m=rdn();
  for(int i=1;i<=n;i++)
    a[i].x=(db)rdn()/1000,a[i].y=(db)rdn()/1000,a[i].z=1-a[i].x-a[i].y;
  sort(a+1,a+n+1,cmp);
  for(int i=0;i<m;i++) f[n+1][i]=INF;
  for(int i=m,d=((n+1)<<1);i<=d;i++) f[n+1][i]=0;
  for(int i=n;i;i--)
    for(int j=0,d=(i<<1);j<=d;j++)
      {
    //    printf("i=%d j=%d\n",i,j);
    //    printf("f[i+1][j+1]=%.8lf f[i+1][j+2]=%.8lf\n",f[i+1][j+1],f[i+1][j+2]);
    if(f[i+1][j+1]==INF)
      {
        if(f[i+1][j+2]==INF)
          f[i][j]=INF;
        else f[i][j]=(a[i].y*f[i+1][j+2]+1)/(1-a[i].x-a[i].z);
      }
    else f[i][j]=(a[i].x*f[i+1][j+1]+a[i].y*f[i+1][j+2]+1)/(1-a[i].z);
    //    printf("f[%d][%d]=%.8lf\n",i,j,f[i][j]);
      }
  printf("%.8lf\n",f[1][0]);
  return 0;
}

原文地址:https://www.cnblogs.com/Narh/p/9638225.html

时间: 2024-10-08 07:54:00

51nod 1450 闯关游戏——期望dp的相关文章

51Nod 1450 闯关游戏 —— 期望DP

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 期望DP: INF 表示这种情况不行,转移时把不行的概率也转移到自身即可: 还要按得星概率排个序,先决策概率大的就是最优策略,因为后面的都基于它. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using n

网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒

前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. web开发初学者往往会忽视一些常见的漏洞, 比如SQL注入攻击, XSS攻击. 本文将简述SQL注入攻击的原理, 并分享下关卡设计, 其在打开潘多拉魔盒的情况下, 又能很好地限制危害. 效果展示: 先打下广告: 网页闯关游戏入口(请狠狠地点击我, ^_^). 本文的想法实施于第十一关--健忘的教授. 很直接的呈现一个登陆对话框, 考验玩家

网页闯关游戏(riddle webgame)--游戏玩法和整体介绍

前言: 记得上大学那会, 有位传说中的大牛, 写了一个网页闯关类的游戏. 当时我们玩得不亦乐乎, 也是第一次接触到这种形式的游戏. 不过当时纯玩家心态, 并没有想过去创造一个. 最近想起这事, 突然想复制实现一个类似的网页闯关游戏. 说干就干, 抄起家伙, 就是一顿猛打, ^_^. 期间的坎坷曲折暂且不表, 甚至中途自觉江郎才尽差点放弃, 所幸最后终于完工, 愿意和大家一起分享该游戏. 展示: 网页闯关游戏, 更多的被称为riddle, 是一种考验搜索, 推理, 分析能力的闯关模式游戏. 用户群

网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点

前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 本文讲描述, 如何在网页端实现一个仿微信的聊天窗口界面, 以及其中涉及到的一些技术点. 作者前端是初学者, 请大拿们轻拍. 效果展示: 先打下广告: 网页闯关游戏入口(请狠狠地点击我, ^_^) . 仿微信窗口的设计源于第四关--倾听女神的故事. 这种聊天对话的布局模式, 比PC端QQ的那种聊天方式更贴近移动端, 我个人感觉. 需求设定:

网页闯关游戏(riddle webgame)--H5刮刮卡的原理和实践

前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 对于刮刮卡, 想必大家都很熟悉, 也很喜欢这种方式. 你可能会很好奇, 它是如何实现的呢? 本文将阐述其原理, 并结合具体实例来演示如何借助H5的canvas来实现类刮刮卡的效果. 展示效果: 网页闯关游戏入口(请狠狠地点击我, ^_^) http://magic.mmxfgame.com. H5刮刮卡的实例源自第六关--拜访东方不败的故

射击闯关游戏,旧王已死、新王当立?

射击类游戏的最佳形态是电子竞技?比如<穿越火线> 街机.单机时代的<魂斗罗>.<合金装备>等闯关型射击游戏体验,不再适合移动手游时代? 射击类游戏需要更真实.更热血,最好如昆丁塔伦蒂洛的电影一样,拳拳到肉.血浆横飞?比如<使命召唤>? 曾经占据游戏机.单机和联机游戏极大份额的射击游戏们,在移动时代只能扮演有益补充? 射击类游戏混的似乎不太好?不是没有缘故的,根本原因就是长期自由搏击,而忘记了,其实关卡才是最能吸引用户的所在? 关卡.关卡.关卡!你还在自由搏击

《报任安书》文言文化常识闯关游戏

<报任安书>文言文化常识闯关游戏 原文地址:https://www.cnblogs.com/arbo/p/11192228.html

《报任安书》文言文化常识闯关游戏&#183;网络版

<报任安书>文言文化常识闯关游戏 暂时还是不行 原文地址:https://www.cnblogs.com/arbo/p/11192471.html

51nod1450 闯关游戏

题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 一个游戏App由N个小游戏(关卡)构成,将其标记为0,1,2,..N-1.这些小游戏没有相互制约的性质,玩家可以任意时刻玩任意一个小游戏,且每个小游戏可以玩任意多次,一个小游戏玩一次消耗玩家恰好1min的时间.每个小游戏会根据玩家的表现返回3种结果:1)挑战失败:2)挑战成功并获得1颗星:3)挑战成功且获得2颗星.玩家可以多次挑战同一个小游戏,而且系统会记录玩家多次挑战中的最好成绩.(注意:两颗星优