Algoritmo de DigitCountDP.

Cualquier duda no dudes en contactar.

* Author: Isaac
* Date: 2009-04-06
* License: -
* Source:
* Description: Digit Cound DP
// Calculate how many numbers in the range from A to B that have digit d in only the even positions and 
// no digit occurs in the even position and the number is divisible by m.

string A, B; int m, d;
ll dp[2002][2002][2][2];

ll calc(int idx, int Mod, bool s, bool b)
	if(idx==B.size()) return Mod==0;

		return dp[idx][Mod][s][b];

	ll ret=0;

	int low=s ? 0 : A[idx]-'0';
	int high=b ? 9 : B[idx]-'0';

	for(int i=low; i<=high; i++)
		if(idx%2 && i!=d) continue;
		if(idx%2==0 && i==d) continue;

		ret=(ret+calc(idx+1, (Mod*10+i)%m, s || i>low, b || i<high))%mod;

		// if(ret>=mod) ret-=mod;

	return dp[idx][Mod][s][b]=ret;

int main()
	return 0;

No te pierdas nada.

Sigue en contacto con Isaac Lozano Osorio!