【记忆化搜索】掷骰子 hpuoj
单点时限: 2.0 sec
内存限制: 512 MB
骰子,中国传统民间娱乐用来投掷的博具,早在战国时期就已经被发明。
现在给你 n 个骰子,求 n 个骰子掷出点数之和为 a 的概率是多少。
输入格式
第一行输入一个整数 T,表示有 T 组测试数据(1≤T≤10)
每组测试数据输入两个整数n,a,表示共有n个骰子,骰子点数总和为a(1≤n≤1000,n≤a≤6∗n)
输出格式
如题。答案对 109+7 取余。
样例
2
1 2
2 2
166666668
27777778 ps:由于自己的dp学的实在不好,所以使用记忆递归来写,个人觉得比dp更容易理解(大概是因为我是蒟蒻)。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+;
const ll mod = 1e9+;
ll dp[][]; //dp[i][j]: 前i个股子可以组成j的方案数
bool vis[][]; //记忆数组
int T,n,a;
void exgcd(ll a,ll b,ll &d,ll &x,ll &y){ //用扩展欧几里得来求逆元
if(!b){
d = a;
x = ;
y = ;
}else{
exgcd(b,a%b,d,x,y);
ll tmpx= x;
x = y;
y = tmpx -(a/b)*y;
}
}
ll inv(ll a,ll mod){ //返回逆元
ll d,x,y;
exgcd(a,mod,d,x,y);
return (x+mod)%mod;
} ll DFS(int n,int le){ //当前第几个股子,当前剩余的数left
if(le <) return ; //剩余数为负数了
if(n == ){
if(le == ) return ; //股子用完了,剩余数为0就+1方案数
else return ;
}
if(vis[n][le]) return dp[n][le]; //记忆返回
int s = ;
for(int i = ;i<=&&i<=le;i++){ //选数
s += DFS(n-,le-i);
s %=mod;
}
vis[n][le] = ;
return dp[n][le] = s;//记忆化
} ll solve(){
ll t = dp[n][a];
for(int i = ;i<=n;i++){
t = t*inv(,mod)%mod;
}
return t;
} int main()
{
cin>>T;
while(T--){
cin>>n>>a;
DFS(n,a);
ll res = solve();
cout<<res<<endl;
}
return ;
}
【记忆化搜索】掷骰子 hpuoj的更多相关文章
- 记忆化搜索模板题---leetcode 1155. 掷骰子的N种方法
1155. 掷骰子的N种方法 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, ..., f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数 ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- loj 1044(dp+记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...
- DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...
- HDU1978 记忆化搜索
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- bzoj4562: [Haoi2016]食物链--记忆化搜索
这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...
- 数位dp/记忆化搜索
一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an ...
随机推荐
- 大数据 SQL Boy 脱坑指南
不可否认的是 SQL 是一个伟大的发明,它让增删改查的操作更加地便捷化,而且 SQL 的学习成本相对其他编程语言来说较低,被逼到会写 SQL 的运营和产品我都见过不少... 大数据行业跟 SQL 更是 ...
- cogs.12运输问题2题解
乍一看貌似和运输问题1没有任何区别,但本题有一个有意思的东西叫做下限,我个人称之为非强制下限,因为本题中要求的实际是我走这条边这条边才至少走下限的流,虽然出题人没说,但从样例来看确实是这样的,而强制下 ...
- golang开发:类库篇(四)配置文件解析器goconfig的使用
为什么要使用goconfig解析配置文件 目前各语言框架对配置文件书写基本都差不多,基本都是首先配置一些基础变量,基本变量里面有环境的配置,然后通过环境变量去获取该环境下的变量.例如,生产环境跟测试环 ...
- 鸟哥的Linux私房菜笔记第六章(二)
文件内容查询 直接查询文件内容 查阅一个文件的内容可以使用指令cat/tac/nl. # [cat|tac|nl] 文件 区别: 1.cat是直接把文件内容输出到屏幕上,并且从第一行开始输出到末行 2 ...
- [PTA] 数据结构与算法题目集 6-7 在一个数组中实现两个堆栈
//如果堆栈已满,Push函数必须输出"Stack Full"并且返回false:如果某堆栈是空的,则Pop函数必须输出"Stack Tag Empty"(其中 ...
- [PTA] 数据结构与算法题目集 6-3 求链式表的表长
Length( List L ){ int res=0; while(L!=NULL){ res++; L=L->Next; } return res; }
- 手把手教你破解文件密码、wifi密码、网页密码
手把手教你破解文件密码.wifi密码.网页密码 1.破解文件密码: 有时候我们在网上下载一个压缩包后,必须要关注或者支付一定费用才给你解压密码,实属比较恶心.在这里手把手叫你实现破解文件解压密码. 1 ...
- python以ATM+购物车剖析一个项目的由来及流程
ATM+购物车 一个项目是如何从无到有的 ''' 项目的由来,几个阶段 0.采集项目需求 1.需求分析 2.程序的架构设计 3.分任务开发 4.测试 5.上线运行 ''' 需求分析: # 对项目需求进 ...
- Oracle导入dump文件
imp USER/PASSWORD@host/DB_name file=xxx.dmp(path) full=y ignore=y
- Android CHM文件阅读器
CHM格式是1998年微软推出的基于HTML文件特性的帮助文件系统.以替代早先的winHelp帮助系统,它也是一种超文本标识语言.在Windows 98中把CHM类型文件称作“已编译的HTML帮助文件 ...