题目其实很简单 以字母为单位 子序列 + dp 思考 (寒假太懒了, 自己也好天真, 还是要努力啊
#include <bits/stdc++.h> using namespace std; const int mod = 20010905; const string sub_str = " iloveyou"; // 注意有两个o!! string str; int sum[10]; int main() { cin>>str; sum[0]=1; for (int i=0; i<str.size(); i++) { if (str[i]>='A'&&str[i]<='Z') str[i]=str[i]-'A'+'a'; auto p = sub_str.find(str[i]); if (p!=str.npos) sum[p] = (sum[p-1]+sum[p])%mod; // 因为有两个o 所以这里find两次 所以 p = sub_str.find(str[i], p+1); if (p!=str.npos) sum[p] = (sum[p-1]+sum[p])%mod; } cout<<sum[8]<<endl; return 0; }