13 관련 (디지털 dp)

1283 단어 동적 기획
1~n 범위 내에 13이 함유되어 있고 13으로 정제될 수 있는 숫자의 개수를 찾아라.
#include 
#include 
#include 
#include  
using namespace std;

int n, shu[20], dp[20][20][10]; 
int dfs(int len, int mod, int state, bool shangxian)
{
    if (len == 0)
        return mod == 0 && state == 2;
    if (!shangxian && dp[len][mod][state])
        return dp[len][mod][state];
    int cnt = 0, maxx = (shangxian ? shu[len] : 9);
    for (int i = 0; i <= maxx; i++)
    {
        int tz = state;
        if (state != 2 && i != 1)//     
            tz = 0;
		if (state != 2&& i == 1 )//      1
            tz = 1;
        if (state== 1 && i == 3)//  13,  state=2,            ;
            tz = 2; 
        cnt += dfs(len - 1, (mod * 10 + i) % 13, tz, shangxian && i == maxx);
    }
    if (!shangxian)
        dp[len][mod][state] = cnt;
    return cnt;
}

int main()
{
    while (~scanf("%d", &n))
    {
        memset(shu, 0, sizeof(shu));
        memset(dp, 0, sizeof(dp));
        int k = 0;
        while (n)
        {
            shu[++k] = n % 10;
            n /= 10;
        }
        printf("%d
", dfs(k, 0, 0, 1)); } return 0; }

좋은 웹페이지 즐겨찾기