2018链家编程题-音乐列表(记忆化搜索DP)
2017-10-12 10:16
260 查看
题目描述
小明喜欢在火车旅行的时候用手机听音乐,他有N首歌在手机里,在整个火车途中,他可以听P首歌,所以他想产生一个播放表产生P首歌曲,这个播放表的规则是:
(1)每首歌都要至少被播放一次
(2)在两首一样的歌中间,至少有M首其他的歌
小明在想有多少种不同的播放表可以产生,那么给你N,M,P,你来算一下,输出结果取1000000007的余数
输入
输入N,M,P
N范围在1到100
M范围在0到N
P范围在N到100
输出
输出结果mod 1000000007的余数
题解
设dp[i][j]表示第i个位置有j种颜色有多少种情况,那么我们可以分为两种情况:
产生相同的:i这个位置有j−m种颜色可以选择来控制相同的元素,那么dp[i][j]=dp[i+1][j]∗(j−m)
产生不相同的:i这个位置就有n−j中颜色来使当前颜色与前面的都不相同,那么dp[i][j]=dp[i+1][j+1]∗(n−j)
而dp[p][n]便为1,记住范围是[0,p−1],所以dp[p][n]才为1,可以用dp做,也可以用记忆化搜索
代码
小明喜欢在火车旅行的时候用手机听音乐,他有N首歌在手机里,在整个火车途中,他可以听P首歌,所以他想产生一个播放表产生P首歌曲,这个播放表的规则是:
(1)每首歌都要至少被播放一次
(2)在两首一样的歌中间,至少有M首其他的歌
小明在想有多少种不同的播放表可以产生,那么给你N,M,P,你来算一下,输出结果取1000000007的余数
输入
输入N,M,P
N范围在1到100
M范围在0到N
P范围在N到100
输出
输出结果mod 1000000007的余数
题解
设dp[i][j]表示第i个位置有j种颜色有多少种情况,那么我们可以分为两种情况:
产生相同的:i这个位置有j−m种颜色可以选择来控制相同的元素,那么dp[i][j]=dp[i+1][j]∗(j−m)
产生不相同的:i这个位置就有n−j中颜色来使当前颜色与前面的都不相同,那么dp[i][j]=dp[i+1][j+1]∗(n−j)
而dp[p][n]便为1,记住范围是[0,p−1],所以dp[p][n]才为1,可以用dp做,也可以用记忆化搜索
代码
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; const int MAXN = 1e2 + 5; const int mod = 1e9 + 7; LL dp[MAXN][MAXN]; int n, m, p; LL DFS(int i, int j) { if (dp[i][j] != -1) return dp[i][j]; if (i == p) { if(j == n) dp[i][j] = 1; else dp[i][j] = 0; return dp[i][j]; } dp[i][j] = 0; if (j > m) { dp[i][j] = (DFS(i + 1, j) % mod) * (j - m) % mod; } dp[i][j] = (dp[i][j] + (DFS(i + 1, j + 1) % mod) * (n - j) % mod) % mod; dp[i][j] %= mod; return dp[i][j]; } int main() { while(~scanf("%d%d%d", &n, &m, &p)) { memset(dp, -1, sizeof(dp)); printf("%lld", DFS(0, 0)); } return 0; }
相关文章推荐
- 2018链家笔试编程题
- URAL - 2018 The Debut Album(状态dp 记忆化搜索)
- 2018链家校招内推-大数据开发工程师笔试编程题
- iOS获取手机内部音乐列表
- 网易2018校园招聘编程题真题集合之重排序列
- 网易2018校园招聘编程题真题-[编程题] 相反数
- (网易2018校招笔试)[编程题] 字符串碎片
- 洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】
- UVA 1331 Minimax Triangulation 最大面积最小的三角剖分(区间dp--记忆化搜索)
- 2018科大讯飞在线笔试题(编程题部分)
- [网易]2018校园招聘编程题真题集合
- 回文数组(dp) - 搜狐集团2018秋季校招笔试题二(技术类)
- 来自风平浪静的明天 (记忆化搜索 dp)
- poj Function Run Fun(DP)(记忆化搜索)
- 2017-2018 ACM-ICPC Southeast Regional Contest (Div. 1) J.Treasure Map dp
- HDU1579 Function Run Fun(DP,记忆化搜索)
- 洛谷P2672 售货员题解 (记忆化搜索,状压DP)
- bzoj5196 [Usaco2018 Feb]Taming the Herd(dp)
- 网易2018校招编程题集合1
- bzoj1026 windy数 数位dp 记忆化搜索