流浪者(rover)

题目描述

有一位流浪者正在一个n∗mn∗m的网格图上流浪。初始时流浪者拥有SS点体力值。

流浪者会从(1,1)(1,1)走向(n,m)(n,m),并且他只会向下走((x,y)→(x+1,y))((x,y)→(x+1,y))或是往右走((x,y)→(x,y+1))((x,y)→(x,y+1)),在所有可行的路线中他会随机选择一条。

网络图中还有KK个障碍点。若流浪者当前体力值为SS,则他经过一个障碍点后体力值会变为⌈S2⌉⌈S2⌉。

现在请你求出,流浪者到达(n,mn,m)时他体力值的期望是多少。

若答案为abab,则你输出abab在模109+7109+7意义下的值即可。

输入

第一行四个整数n,m,K,Sn,m,K,S, 意义见题目描述。

接下来K行每行两个整数Xi,YiXi,Yi,表示一个障碍点,保证一个障碍点不会出现多次。起点与终点可能也会是障碍点。

输出

仅一行一个整数表示答案。

样例1解释

共有6种合法路径,这里不一一列出。

16∗(6+6+11+3+6+6)=19316∗(6+6+11+3+6+6)=193

约定

30%的数据:n,m≤10n,m≤10

50%的数据:n,m≤1000n,m≤1000

1000%的数据:1≤n,m≤105,0≤K≤min(n∗m,2000),1≤S≤1061≤n,m≤105,0≤K≤min(n∗m,2000),1≤S≤106


solution

slz:经典模型

我:完全不会

30:dfs

50:dp 令f[i][j][k]表示走到i j,经过k个格子的方案数

由于当k>20时对k不同对答案没有影响,最后一维可以只开20

O(nm20)

100:

dp 令f[i][j]表示当前在第i个特殊点,走到终点还会经过恰好j个特殊点的路径数

g[i][j]表示当前在第i个特殊点,走到终点还会经过小于等于j个特殊点的路径数

ways(i,j)表示i到j的路径数

从后往前dp即可

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define maxn 2005
#define mod 1000000007
#define ll long long
using namespace std;
int n,m,K,S,s[24];
ll h[200008],ny[200008],f[maxn][25],g[maxn][23];
ll work(ll a,int num){ll ans=1;while(num){if(num&1)ans=ans*a;a=a*a;a%=mod;ans%=mod;num>>=1;}return ans;
}
struct node{int x,y;
}p[maxn];
bool cmp(node a,node b){return a.x<b.x||a.x==b.x&&a.y<b.y;
}
ll C(int N,int M){return h[N]*ny[M]%mod*ny[N-M]%mod;
}
int main()
{cin>>n>>m>>K>>S;int Max=200005;h[0]=1;for(int i=1;i<=Max;i++)h[i]=h[i-1]*i%mod;ny[Max]=work(h[Max],mod-2);for(int i=Max-1;i>=0;i--)ny[i]=ny[i+1]*(i+1)%mod;s[0]=S;int cnt=0;for(;s[cnt]>1;cnt++)s[cnt+1]=(s[cnt]+1)/2;for(int i=1;i<=K;i++){scanf("%d%d",&p[i].x,&p[i].y);}sort(p+1,p+K+1,cmp);p[0].x=1;p[0].y=1;for(int i=K;i>=0;i--){int xi=p[i].x,yi=p[i].y;for(int j=0;j<cnt;j++){ll sum=0;g[i][j]=C(n-xi+m-yi,n-xi);for(int k=K;k>i;k--){if(p[k].y<p[i].y)continue;int xk=p[k].x,yk=p[k].y;sum+=f[k][j]*C(xk-xi+yk-yi,xk-xi)%mod;sum%=mod;}g[i][j]-=sum;g[i][j]%=mod;}g[i][cnt]=C(n-xi+m-yi,n-xi);for(int j=1;j<=cnt;j++)f[i][j]=(g[i][j]-g[i][j-1])%mod;f[i][0]=g[i][0]; }ll Answer=0;for(int i=0;i<=cnt;i++){Answer+=f[0][i]*s[i]%mod;Answer%=mod;}ll All=C(n+m-2,m-1);Answer=Answer*work(All,mod-2);Answer=(Answer%mod+mod)%mod;printf("%lld\n",Answer);return 0;
}

转载于:https://www.cnblogs.com/liankewei/p/10358784.html

流浪者(rover)相关推荐

  1. 公告:Rover's Official Blog停止更新

    想了几天,终于决定写这么一个公告了.并不是因为写些东西太累或者太占时间而停止了更新,也许就如同前文说是因为今天喝多了酒(呵呵,玩笑),也许如同MSN副标题所言:严重的压力和抑郁,强烈的人格分裂和精神分 ...

  2. 2018.11.03-dtoj-3130-流浪者(rover)

    题目描述: 有一位流浪者正在一个n*m的网格图上流浪.初始时流浪者拥有S点体力值. 流浪者会从(1,1)走向(n,m),并且他只会向下走((x,y)→(x+1,y))或是往右走((x,y)→(x,y+ ...

  3. Katas编写的Java教程:Mars Rover

    编程kata是一种练习,可以帮助程序员通过练习和重复练习来磨练自己的技能. 本文是" 通过Katas进行Java教程 "系列的一部分. 本文假定读者已经具有Java的经验,熟悉单元 ...

  4. 修一座安全的广厦,庇护赛博世界的流浪者

    问一个极具争议的问题:你觉得自己有没有被应用软件追踪? 很多朋友都觉得是,不然怎么解释刚刚在网上搜索过运动鞋,下一秒打开电商软件就能被精准推送相关产品呢? 你并不是一个人. 9月份发布的<App ...

  5. JPEX联手西悉尼流浪者队 推出250款独家NFT“J-ball”

    摘要:JPEX平台联手知名澳超联赛足球俱乐部西悉尼流浪者队,推出了代表权益且具备纪念价值的NFT"J-ball",这是加密资产板块通过NFT赋能体育板块,且与之深度融合的代表性案例 ...

  6. 看雪ctf 流浪者 WP

    看雪ctf 第一题 流浪者 wp   打开程序,提示要验证password,载入OD,按照签到题的思路,改了一个跳转,出现了提示框pass,但是没有flag,应该不是这种思路(我是一个刚入手的萌新,可 ...

  7. 攻防世界逆向入门题之流浪者

    攻防世界逆向入门题之流浪者 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的流浪者 下载附件,照例扔入exeinfope中查看信息: 32位PE文件无壳,照例扔入ida32中查看伪代码: 是没 ...

  8. 时光机与流浪者-我的2017

    红焰火 望着我 快乐的 那个我 转眼悄悄的回来了 旧门锁 别等我 消失的 那个我 就是我要我的自我 流浪者 就是我 飞过了 洪荒的 神秘宇宙的流浪者 别等我 成全我 忠于我 还给我 做我渴望的那个我 ...

  9. The Earth Rover

    上个月, 近100位大学生软件开发爱好者访问了我们事业部在上海的办公室,我和实习生石超向大家介绍了Azure Services Platform和我们中国团队在其中负责的.NET访问控制服务,并做了一 ...

  10. 流浪大师善始者众善终者寡_流浪者–适合每个开发人员的瑞士军刀

    流浪大师善始者众善终者寡 每当我们转到一个新项目时,或者想要探索新的技术堆栈时,都可以: 我们面临环境问题. 作为开发人员,我们通常倾向于在本地环境中安装所有内容. 多次证明是一场灾难. 如今,现代W ...

最新文章

  1. 文档过期打不开怎么办_网络上下载文档,常见的3个问题,一招教你快速解决!...
  2. Python操作ElasticSearch
  3. 依赖注入之Autofac使用总结
  4. matlab二重定积分_怎样用matlab求二重积分?
  5. mysql差几年,MySQL两时间计算、年份差、月份差、天数差
  6. hover时候缓慢切换两张图片
  7. chromium 桌面_如何使用Chromium和PyInstaller将Web应用程序转换为桌面应用程序
  8. 【Elasticsearch】Elasticsearch 集群协调迎来新时代
  9. 求职与简历功能上线测试
  10. springmvc 控制器 读取properties文件
  11. delphi 消息列表中文说明
  12. Mybatis框架Mybatis下载步骤
  13. win10 同时多用户远程桌面连接-RDPWrap-v1.6.2-support-21H2-19044.1949
  14. 搭建vue开发环境的步骤
  15. Linux卸载驱动方法
  16. js rsa验签_【HAVENT原创】前端使用 jsrsasign 进行 RSA 加密、解密、签名、验签
  17. centos7.6安装lnmp环境
  18. 如何用python来打印一个三角形
  19. 【MFC】MFC修改菜单名后不更新问题
  20. python计算学分绩点_GitHub - junfenghu/calc_GPA: 计算学分基点

热门文章

  1. 超高频RFID电子标签技术和应用分析
  2. 单招计算机专业常见面试题库,历年高职单招面试常见问题集锦
  3. python 判断区分字符串是否都是英文/中文
  4. 初次面试初生牛犊不怕虎,居然觉得面试就是聊天?
  5. 计算机网络(谢希仁第七版)期末重点
  6. 深入理解Flash的沙箱
  7. java时区_Java时区的转换
  8. ListView组件的应用
  9. [Unity]Unity3D游戏引擎游戏开发软件相比与其他的优势
  10. Error Domain=AVFoundationErrorDomain Code=-11841 (null) timeRange 和 duration 不一致