题目
小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数,得到了一个数字序列:
S=12345678910111213⋯20222023S=12345678910111213⋯20222023
小蓝想知道 SS 中有多少种子序列恰好等于 20232023?
提示,以下是 33 种满足条件的子序列(用中括号标识出的数字是子序列包含的数字):
1[2]34567891[0]111[2]1[3]14151617181920212223⋯1[2]34567891[0]111[2]1[3]14151617181920212223⋯
1[2]34567891[0]111[2]131415161718192021222[3]⋯1[2]34567891[0]111[2]131415161718192021222[3]⋯
1[2]34567891[0]111213141516171819[2]021222[3]⋯1[2]34567891[0]111213141516171819[2]021222[3]⋯
注意以下是不满足条件的子序列,虽然包含了 22、00、22、33 四个数字,但是顺序不对:
1[2]345678910111[2]131415161718192[0]21222[3]⋯1[2]345678910111[2]131415161718192[0]21222[3]⋯
#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[5];
string s;
signed main(){for(int i=1;i<=2023;i++){s+=to_string(i);}for(int i=0;i<s.size();i++){if(s[i]=='2'){dp[0]++;dp[2]+=dp[1];//202->20+2} else if(s[i]=='0'){dp[1]+=dp[0];//20->2+0}else if(s[i]=='3'){dp[3]+=dp[2];//2023->202+3}}cout<<dp[3];
}