题目来源:牛客网
题目描述
给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除
答案对1e9+7取模
输入描述:
输入一个字符串,由数字构成,长度小于等于50
输出描述:
输出一个整数
输入
132
9
输出
3
1
思路:
因为被3取余只可能是 0 1 2
所以每次提取一个数字把它现有的可能和之前的可能性相结合就可以得到每次的被3整除的总数。
dp [ i ] [ j ] += ( dp [ i - 1 ] [ j ] + dp [ i - 1 ] [ ( j + 3 - x ) % 3 ] ) % mod ; // 本身 之前不加 之前加本
AC代码:
#include<bits/stdc++.h>
using namespace std;
string t;
int dp[55][3];
int x;
const int mod