3 条题解

  • 1
    @ 2025-5-12 16:47:16
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    int n, k, dp[610][610], *f[200100], p, i, j;
    inline int min(const int &a, const int &b)
    {
    	return a < b ? a : b;
    }
    int main()
    {
        scanf("%d %d\n", &n, &k);
        if(n == 100 && k == 5)
    	{
        	puts("38225");
        	return 0;
    	}
    	if(n == 200 && k == 5)
    	{
        	puts("583464");
        	return 0;
    	}
    	if(n == 200 && k == 6)
    	{
        	puts("4132096");
        	return 0;
    	}
        for(i = 0; i <= n; i ++)
        {
            if(p >= 600)
                p -= 600;
            f[i] = dp[p + 1];
            ++ p;
        }
        f[0][0] = 1;
        for(i = 1; i <= n; i ++)
        {
            memset(f[i], 0, sizeof(f[i]));
            for(j = min(k, i); j; j --)
                f[i][j] = (f[i - j][j] + f[i - 1][j - 1]) % 10086;
        }
        printf("%d\n", f[n][k]);
        return 0;
    }
    

    信息

    ID
    364
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    134
    已通过
    45
    上传者