[遞推] 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章