把(2, 3, 5, 7)称为primes,能被primes整除的我们称之为Walprimes,比如
int void F(string s, int prime){ int R[s.length()][prime]; memset(R, 0, sizeof(R)); for(int i= s.length()-1;i>=0; i--){ int first = s[i] - ‘0‘; for(int k = i+1; k < s.length(); j++){ //对R的第一维进行遍历 for(int j = 0; j < primes; j ++){ //对R的第二维进行遍历 R[i][j] += R[k][(prime+(j-first)%prime)%prime]; //i+... R[i][j] += R[k][(prime+(i-first)%prime)%prime]; //i-... } first = 10*first +s[k]; //i后面既没+也没- } R[i][first % p] += 1; //最后一个first } return return R[0][0]; } int walprimes(const string& s) { return F(s, 2) + F(s, 3) + F(s, 5) + F(s, 7) - F(s, 2 * 3) - F(s, 2 * 5) - F(s, 2 * 7) - F(s, 3 * 5) - F(s, 3 * 7) - F(s, 5 * 7) + F(s, 3 * 5 * 7) + F(s, 2 * 5 * 7) + F(s, 2 * 3 * 7) + F(s, 2 * 3 * 5) - F(s, 2 * 3 * 5 * 7); }
Inclusion–exclusion principle(动态规划)
原文:http://www.cnblogs.com/qionglouyuyu/p/4843350.html