Uva 10401 Injured Queen Problem ( 计数DP)

Problem I

Injured Queen Problem

Input: standard input

Output: standard output

Time Limit: 6 seconds

Memory Limit: 32 MB

Chess is a two-player board game believed to have been played in India as early as the sixth century. However, in this problem we will
not discuss about chess, rather we will talk about a modified form of the classic n-queen problem. I know you are familiar with plotting n-queens on a chess board with the help of a classic backtracking algorithm. If you write that algorithm now you will find
that there are 92 ways of plotting 8 queens in an 8x8 board provided no queens attack each other.

In this problem we will talk about injured queens who can move only like a king in horizontal and diagonal direction from current position but can reach any row from current position like a normal chess queen. You will have to find the number of possible
arrangements with such injured queens in a particular (n x n) board (with some additional constraints), such that no two queens attack each other.



Fig: Injured Queen at a6 can reach the adjacent grey squares. Queen at e4can reach adjacent grey squares. The injured queen positions are black and the reachable places are grey.

Input

Input file contains several lines of input. Each line expresses a certain board status. The length of these status string is the board dimension n (0<n<=15). The first character of the string denotes the status of first column, the second
character of the string denotes the status of the second column and so on. So if the first character of the status string is 2, it means that we are looking for arrangements (no two injured queen attack each other) which has injured queen
in column a, row 2. The possible numbers for rows are 1, 2, 3… D, E, F which indicates row 1, 2, 3… 13, 14, 15. If any column contains ‘?’ it means that in that column the
injured queen can be in any row. So a status string 1?4??3 means that you are asked to find out total number of possible arrangements in a (6x6) chessboard which has three of its six injured queens at a1c4 and f3.
Also note that there will be no invalid inputs. For example “1?51” is an invalid input because a (4x4) chessboard does not have a fifth row.

Output

For each line of input produce one line of output. This line should contain an integer which indicates the total number of possible arrangements of the corresponding input status string.

Sample Input

??????

???????????????

???8?????

43?????

Sample Output

2642

22696209911206174

2098208

0

题意:告诉你受伤的皇后的攻击范围(图片),给定一个字符串,如果第i个字符

是?则表示皇后能放在任意位置,如果不是?则表示它指定了必须放在哪一行,问

有几种放法。

思路: dp[ i ][ j ] 表示填充前i 列 第 j 行时的方法数 。

然后对每列 是 ? 或数字进行讨论 。

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
const int maxn=20;

long long dp[maxn][maxn];
int len;
string str;

int get_num(char ch)
{
    if(ch>='1' && ch<='9')  return ch-'0';
    return ch-'A'+10;
}

void initial()
{
    len=str.length();
    memset(dp,0,sizeof(dp));
}

void solve()
{
    if(str[0]=='?') for(int i=1; i<=len; i++)  dp[1][i]=1;
    else  dp[1][get_num(str[0])]=1;

    for(int j=2; j<=len; j++)
    {
        if(str[j-1]!='?')
        {
            int num=get_num(str[j-1]);
            for(int i=1;i<=len;i++)
                if(i!=num-1 && i!=num && i!=num+1)
                     dp[j][num]+=dp[j-1][i];
        }
        else
        {
            for(int i=1; i<=len; i++)
            {
                 for(int k=1;k<=len;k++)
                    if(k!=i-1 && k!=i && k!=i+1)
                     dp[j][i]+=dp[j-1][k];
            }
        }
    }
    long long ans=0;
    for(int i=1;i<=len;i++)  ans+=dp[len][i];
    printf("%lld\n",ans);
}

int main()
{
    while(cin>>str)
    {
        initial();
        solve();
    }
    return 0;
}
时间: 2024-10-01 11:36:28

Uva 10401 Injured Queen Problem ( 计数DP)的相关文章

uva 10401 Injured Queen Problem(DP)

uva 10401 Injured Queen Problem 题目大意:这是一个变形的N皇后问题,皇后不再是占据一行一列以及斜线,她占据的只是她周围的一圈以及她所在的一列.题目给出一个含有问号,数字和字母的字符串.第i个字符是问号代表皇后在第i列的任意一行,若第i个字符是数字或字母X(1-F)代表皇后在第i列的X行.求满足该字符串的摆放方式的方法一共有几种. 解题思路:从第一列开始往后递推.dp[i][j]表示的是结合j - 1列的摆放方式,将皇后放在(i, j)的位置会有几种情况. #inc

Uva 10912 Simple Minded Hashing (计数DP)

4th IIUC Inter-University Programming Contest, 2005 H Simple Minded Hashing Input: standard input Output: standard output Problemsetter: Sohel Hafiz All of you know a bit or two about hashing. It involves mapping an element into a numerical value usi

UVa 1640 The Counting Problem (数位DP)

题目 题目大意 给出\(a\).\(b\), 统计\(a\)和\(b\)(包含\(a\)和\(b\))之间的整数中, 数字\(0, 1, 2, 3, 4, 5, 6, 7, 8, 9\)分别出现了多少次.\(1 ≤ a, b ≤ 10^8\).注意, \(a\)有可能大于\(b\). 题解 设\(f_d(n)\)表示\(0 \cdots n\)中数字\(d\)出现的个数, 则求的是\(f_d(a) - f_d(b - 1)\). 暴力显然是会\(TLE\)的, 我们可以分段来求.例如我们要求\(

uva 11195 Another queen (用状态压缩解决N后问题)

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2136 Problem A Another n-Queen Problem I guess the n-queen problem is known by every person who has studied backtracking. In this problem you s

HDU4901 The Romantic Hero 计数DP

2014多校4的1005 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4901 The Romantic Hero Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 393    Accepted Submission(s): 150 Problem Description There i

[计数dp] ural 1114. Boxes

题目链接: http://acm.timus.ru/problem.aspx?space=1&num=1114 1114. Boxes Time limit: 0.6 second Memory limit: 64 MB N boxes are lined up in a sequence (1 ≤ N ≤ 20). You have A red balls and B blue balls (0 ≤ A ≤ 15, 0 ≤ B ≤ 15). The red balls (and the blu

CodeForces 176B Word Cut (计数DP)

Word Cut Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 176B Description Let's consider one interesting word game. In this game you should transform one word into another through specia

hdu 4901 The Romantic Hero(计数dp)2014多校训练第4场1005

The Romantic Hero                                                                               Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description There is an old country and the king fell in lov

uva10401Injured Queen Problem(递推)

题目:uva10401Injured Queen Problem(递推) 题目大意:依然是在棋盘上放皇后的问题,这些皇后是受伤的皇后,攻击范围缩小了.攻击范围在图中用阴影表示(题目).然后给出棋盘的现状,???3?4:在一个6*6的棋盘上,由于皇后是能够列向攻击的,所以一列仅仅能放一个皇后,所以第一个?代表第一列的皇后放的行未知,这样3的意思就是第4列皇后在第三行.也就是确定了第4列皇后的位置. 要求棋盘上的皇后不互相攻击.问这种棋盘能够有多少不同的放法. 解题思路:一開始想状态.想把不同的棋盘