[递推] Codeforces 660E Educational Codeforces Round 11 E. Different Subsets For All Tuples

对于一个确定串s,求不同子序列的个数有经典dp

  • fi,si=jfi1,j
  • fi,j=fi1,j,jsi

因为转移都是形式一样的我试着把所有串的fi都加起来,然后就发现Fj除了j=ϕ之外都是一样的,然后就记录两个量,然后就递推出来了

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;

#define read(x) scanf("%d",&(x))

ll n,m,P;

int main(){
  freopen("invisible.in","r",stdin);
  freopen("invisible.out","w",stdout);
  cin>>n>>m; P=1e9+7;
  ll x=1,y=0;
  for (int i=1;i<=n;i++){
    ll sum=(x+y*m)%P;
    x=x*m%P;
    y=(sum+y*(m-1))%P;
  }
  cout<<(x+y*m)%P<<endl;
  return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许随意转载。 https://blog.csdn.net/u014609452/article/details/74857105
个人分类: 递推
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭