hdu5396 2015多校第九场 区间dp
来源:互联网 发布:sql sa默认密码 编辑:程序博客网 时间:2024/06/18 11:48
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5396
题意:给你n个数和n-1个操作符(2<=n<=100),问你不断地每次给操作符的左右相邻的两个数加括号,直到最后只剩一个数为止,问你不同的方案的所有最终剩下一个数的和是多少。在一次取操作符时只要操作符的位置不相同就算一种方案。如果有n个操作符的话肯定有n!种方案。
思路:看到n比较小。。。不是搜索就是区间dp。。。显然,搜索是n!种方案,算到量子计算机被研制出来都算不出来。。。那肯定区间dp了。。既然是dp,那么状态方程和转移明了了,这道题就可解了。。。
设dp[i][j]为第i个数到第j个数的所有方案的和,那么假设我们已经枚举到区间i,j(i < j),对于加法和减法这两种情况是类似的,我们考虑第k个操作符(i<=k<j,假设k这个操作符是最后一次做的,两边的操作符都已经完成了),有
dp[i][j] += (dp[i][k] * A[j - (k + 1)] % mod + dp[k + 1][j] * A[k - i] % mod) % mod * C[j - i - 1][k - i] % mod
其中A数组储存阶乘值,C数组储存组合值。
为什么要乘以阶乘?对于左边的i到k来说,假设右边有n个符号,那么右边肯定有n!种方案,对于每个方案都要加上左边的总和,所以要乘以一个阶乘。同理右边。。。。
为什么要乘以一个组合数?因为第k个操作符是最后取的,那么假设左边有n个操作符,右边有m个操作符,这么操作符取的顺序不同,最后的方案数也是不同的,所以我们把n+m个看作是取的顺序的位置,C[n + m][n]就相当与左边那些操作符放在哪些顺序的位置上。。。。
乘法的转移方程稍微有些不同,
dp[i][j] += (dp[i][k] * dp[k + 1][j] % mod) * C[j - i - 1][k - i] % mod就行了
代码:
- hdu5396 2015多校第九场 区间dp
- hdu5396(区间DP)
- HDU5396 Expressions(区间DP)
- hdu5396(区间dp)
- 【区间dp】hdu5396 Expression
- hdu5396 Expression 记忆化搜索+组合数 多校联合第九场
- 2015多校第九场 HDU 5396 Expression 区间DP,组合数
- hdu5396 Expression 区间dp +排列组合
- hdu5396(区间dp+组合数)
- hdu5396(2015多校9)--Expression(区间dp)
- hdu4689 多校第九场 dp
- hdu6169 数论 思维DP 2017多校第九场1009
- 多校第九场
- 2015多校第九,十场总结
- 多校比赛第九场
- [BZOJbegin][noip2016十连测第九场]小P的单调区间(dp+bit)
- 多校第九场 1005 hdu 5400 Arithmetic Sequence ( dp)
- hdu 5854K-th value (2016多校第九场1011) 树形dp
- Bloxorz I (poj 3322 水bfs)
- MFC用CreateDirectory创建文件目录
- 传递多个参数的方法(Multiple parameters)
- 记录自己成长和学习
- 使用VMWARE9.0安装xp ghost盘后启动提示找不到操作系统
- hdu5396 2015多校第九场 区间dp
- 日经春秋 20150819
- ubuntu安装shiny-server记录
- 让IE支持placeholder属性,兼容IE6,7,8,9
- jQuery--品牌展示
- 左值、右值与右值引用
- 关于盒子二三事
- java list三种遍历方法性能比较
- noip2002—选数