• UVa 10401 Injured Queen Problem(简单DP)


    题意:

    受伤的皇后只能攻击它这一列的,和它周围的九个格子。

    给定一个字符串,如果第i个字符是?则表示皇后能放在任意位置,如果不是?则表示它指定了必须放在哪一行,问有几种放法。

    思路:

    这种格子题目类似于小明回家,有几条路径可以选择一样,只不过初始点和结束状态不怎么一样而已。

    dp[i, j]表示(i, j)坐标最多有几种放法,dp[i, j]取决于dp[i-1, k],k取决于题目条件。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cctype>
    
    const int MAXN = 20;
    char b[MAXN];
    long long int dp[MAXN][MAXN];
    
    int main()
    {
        while (scanf("%s", b) == 1)
        {
            int n = strlen(b);
            memset(dp, 0, sizeof(dp));
    
            if (b[0] == '?')
            {
                for (int i = 0; i < n; ++i)
                    dp[0][i] = 1;
            }
            else
            {
                if (isdigit(b[0]))
                {
                    int k = b[0] - '1';
                    dp[0][k] = 1;
                }
                else 
                {
                    int k = b[0] - 'A' + 9;
                    dp[0][k] = 1;
                }
            }
    
            for (int i = 1; i < n; ++i)
            {
                if (b[i] == '?')
                {
                    for (int j = 0; j < n; ++j)
                    {
                        for (int k = 0; k < j - 1; ++k)
                            dp[i][j] += dp[i-1][k];
                        for (int k = j + 2; k < n; ++k)
                            dp[i][j] += dp[i-1][k];
                    }
                }
                else
                {
                    int j;
                    if (isdigit(b[i]))
                        j = b[i] - '1';
                    else
                        j = b[i] - 'A' + 9;
    
                    for (int k = 0; k < j - 1; ++k)
                        dp[i][j] += dp[i-1][k];
                    for (int k = j + 2; k < n; ++k)
                        dp[i][j] += dp[i-1][k];
                }
            }
            long long int ans = 0;
            for (int i = 0; i < n; ++i)
                ans += dp[n-1][i];
            printf("%lld\n", ans);
        }
        return 0;
    }
    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    AdaBoost学习笔记
    隐马尔科夫模型(HMM)学习笔记二
    隐马尔可夫模型(HMM)学习笔记一
    k-means学习笔记
    pandas练习(四)--- 应用Apply函数
    pandas练习(三)------ 数据分组
    pandas练习(二)------ 数据过滤与排序
    pandas练习(一)------ 了解数据
    Android Studio Error:CreateProcess error=216
    玩QQ游戏,见到好几个图像是美女的QQ,就不始玩
  • 原文地址:https://www.cnblogs.com/kedebug/p/2781553.html
Copyright © 2020-2023  润新知