zoukankan      html  css  js  c++  java
  • 递推DP URAL 1009 K-based Numbers

    题目传送门

    题意:n位数,k进制,求个数
    分析:dp[i][j] 表示i位数,当前数字为j的个数;若j==0,不加dp[i-1][0];

    代码1:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    const int MAXN = 22;
    const int INF = 0x3f3f3f3f;
    long long dp[MAXN][MAXN];
    
    int main(void)        //URAL 1009 K-based Numbers
    {
        //freopen ("B.in", "r", stdin);
    
        int n, k;
        while (scanf ("%d%d", &n, &k) == 2)
        {
            memset (dp, 0, sizeof (dp));
            for (int i=1; i<k; ++i)    dp[1][i] = 1;
            for (int i=2; i<=n; ++i)
            {
                for (int j=0; j<k; ++j)
                {
                    if (!j)
                        for (int l=1; l<k; ++l)    dp[i][j] += dp[i-1][l];
                    else
                        for (int l=0; l<k; ++l)    dp[i][j] += dp[i-1][l];
                }
            }
    
            long long ans = 0;
            for (int i=0; i<k; ++i)    ans += dp[n][i];
            printf ("%I64d
    ", ans);
        }
    
        return 0;
    }

    代码2(空间优化):

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    const int MAXN = 22;
    const int INF = 0x3f3f3f3f;
    long long dp[MAXN];
    
    int main(void)        //URAL 1009 K-based Numbers
    {
        //freopen ("B.in", "r", stdin);
    
        int n, k;
        while (scanf ("%d%d", &n, &k) == 2)
        {
            memset (dp, 0, sizeof (dp));
            
            dp[0] = 1;    dp[1] = k - 1;
            for (int i=2; i<=n; ++i)
            {
                dp[i] = (dp[i-1] + dp[i-2]) * (k-1);
            }
    
            printf ("%I64d
    ", dp[n]);
        }
    
        return 0;
    }
    
    编译人生,运行世界!
  • 相关阅读:
    1014. 福尔摩斯的约会
    1009. 说反话
    1002. 写出这个数
    1031. 查验身份证
    1021. 个位数统计
    1006. 换个格式输出整数
    1058. A+B in Hogwarts
    1027. Colors in Mars
    1019. General Palindromic Number
    Windows 新装进阶操作指南
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4482702.html
Copyright © 2011-2022 走看看