A: Colorful Subsequence
•题意
给一个长为n的小写字母序列,从中选出字母组成子序列
问最多能组成多少种每个字母都不相同的子序列
(不同位置的相同字母也算是不同的一种)
•思路
对于每种字母有选与不选两种情况,
①如果选的话,j假设这种字母有xi种,那就有xi种选法
②如果不选的话,有不选这一种方法
那总和起来就有(xi+1)中方法
设num[i]为每种字母的个数
对于所有的字母,总的种类数就是
但是要注意全不选的这种情况,对于上述种类数-1
即
•代码
View Code#include<bits/stdc++.h> using namespace std; #define ll long long const long long mod=1e9+7; char s[100005]; int Count[27]; int main() { int n; cin>>n; ll ans=1; for(int i=0;i<n;i++) { cin>>s[i]; Count[s[i]-'a']++; } for(int i=0;i<26;i++) ans=(ans%mod*(Count[i]+1)%mod)%mod; cout<<ans-1<<endl; }