传送门
给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除
答案对1e9+7取模
输入描述:
输入一个字符串,由数字构成,长度小于等于50
输出描述:
输出一个整数
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7;
string s;
int n,a[55],dp[455],ans;
signed main(){
ios::sync_with_stdio(0);
cin >> s;
for(int i = 0; i < s.size(); i++){
a[i + 1] = s[i] - '0';
n++;
}
dp[0] = 1;
for(int i = 1; i <= n; i++){
for(int j = 450; j >= a[i]; j--){
dp[j] = (dp[j] + dp[j - a[i]]) % mod;
}
}
for(int i = 0; i <= 450; i++){
if(i % 3 == 0)
ans = (ans + dp[i]) % mod;
}
cout << ans - 1<< endl;
return 0;
}