Educational Codeforces Round 11 E. Different Subsets For All Tuples 动态规划★ ★
来源:互联网 发布:大学生有多少存款知乎 编辑:程序博客网 时间:2024/06/17 14:28
题意
现在定义f(a)表示这个a串里面所有不相同的子序列的个数
现在给你n,m,让你用字符集为m,去构造出长度为n的串
然后让你算出所有f(a)的累加
题解:
考虑dp
dp[i][j]表示长度为i,以字符j结尾的答案是多少
dp[i][j]=sigma(dp[i-1][k]*2-dp[pre[j]-1][k])
然后这个玩意儿显然对于任意的j的都是一样的,而且pre[j]前面的每个位置都是可能的,这里的dp是个前缀和,所以直接扣除就可以了
那么直接化简为:dp[i]=dp[i-1]*(2m-1)
但是这个dp是没有考虑空串的
那么在加上空串就好了,所以答案就是
dp[i] = dp[i-1]*(2m-1)+m^(i-1)
法二:
强行推公式,枚举长度k,考虑每个长度为k的序列能作为多少个长度为n的序列的子序列,考虑k>=1,记子序列为s[1]s[2]...s[k],位置序列为p[1]p[2]...p[k],为了保证不重不漏,对每个长为n的序列,如果包含s[]作为子序列,找出使得位置序列字典序最小的,这要求p[1]之前不出现s[1],p[1]和p[2]之间不出现s[2],依此类推,枚举最后一个位置q,即q=p[k],那么有C(q-1,k-1)*m^k*(m-1)^(q-k)*m^(n-q),上式对q从k到n,对k从1到n求和,考虑交换求和,先对k从1到q求和,得到m^(n-q+1)*(2m-1)^(q-1),上式对q从1到n求和,这是个等比数列,可以进一步化简,再加上k=0的贡献m^n即可,复杂度O(logn)。
#include<bits/stdc++.h>using namespace std;const int mod = 1e9+7;int main(){ int n,m; scanf("%d%d",&n,&m); long long ans = 2*m; long long tmp = 1; for(int i=2;i<=n;i++) { tmp = tmp * m % mod; ans = (ans * (2 * m - 1) % mod + tmp + mod) % mod; } cout<<ans<<endl;}
0 0
- Educational Codeforces Round 11 E. Different Subsets For All Tuples 动态规划★ ★
- Educational Codeforces Round 11 E. Different Subsets For All Tuples 动态规划,组合数学
- [递推] Codeforces 660E Educational Codeforces Round 11 E. Different Subsets For All Tuples
- CodeForces 660E Different Subsets For All Tuples(动态规划)
- Codeforces 660E Different Subsets For All Tuples【组合数学】
- [组合] Codeforces #660E. Different Subsets For All Tuples
- CodeForces - 660E Different Subsets For All Tuples (组合数学&DP)好题
- CodeForces 660 E.Different Subsets For All Tuples(组合数学)
- 【Educational Codeforces Round 10E】【双连通分量缩环 BFS】Pursuit For Artifacts ★
- Educational Codeforces Round 10 E.Pursuit For Artifacts
- Educational Codeforces Round 21E
- Educational Codeforces Round 26 E
- Educational Codeforces Round 903E
- 【Educational Codeforces Round 1E】【动态规划-多维DP】Chocolate Bar 矩形巧克力掰开吃的最小成本
- Educational Codeforces Round 11
- Educational Codeforces Round 8(E. Zbazi in Zeydabad(树状数组优化))★ ★
- Educational Codeforces Round 9 E.Thief in a Shop (FFT)★ ★
- Educational Codeforces Round 12 E. Beautiful Subarrays 预处理前缀+字典树优化★ ★
- Codeforces Beta Round #11-B. Jumping Jack
- 理解doT.js {{## #}}
- HBase简介
- 面向过程 VS 面向对象
- TextureView 实现Camera预览
- Educational Codeforces Round 11 E. Different Subsets For All Tuples 动态规划★ ★
- 零碎知识点总结
- 关于时间复杂度
- DIP关键算法-去噪算法评价标准
- LeetCode[290] Word Pattern
- 51nod 1402 最大值(贪心)
- 【27.77%】【BZOJ 4066】简单题
- Java 高效压缩zip
- Ubuntu 下安装xgboost