Injured Queen Problem - UVa 10401 dp
来源:互联网 发布:vb erp系统源码下载 编辑:程序博客网 时间:2024/05/27 16:42
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 are92 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 ate4 can 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 are1, 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 a1, c4 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
题意:按照图中所给的,每个皇后可以攻击的范围,问如果每列都有一个皇后,并且在给定的情况下,有多少种可行的情况。
思路:dp[i][j]表示在第i列的第j行有皇后时的情况,然后递推,挺简单的。
AC代码如下:
#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;char s[20],num[20];long long dp[20][20],ans;int n;void solve(int x,int y){ int i,j,k; for(i=1;i<y-1;i++) dp[x][y]+=dp[x-1][i]; for(i=y+2;i<=n;i++) dp[x][y]+=dp[x-1][i];}int main(){ int i,j,k,len; bool flag; while(~scanf("%s",s+1)) { n=strlen(s+1); flag=false; for(i=1;i<=n;i++) if(s[i]=='?') num[i]=0; else if(s[i]>'0' && s[i]<='9') num[i]=s[i]-'0'; else num[i]=s[i]-'A'+10; for(i=1;i<=n;i++) if(num[i]>n) flag=true; for(i=2;i<=n;i++) if(num[i]>0 && num[i-1]>0) if(abs(num[i]-num[i-1])<=1) flag=true; if(flag) { printf("0\n"); continue; } memset(dp,0,sizeof(dp)); if(num[1]>0) dp[1][num[1]]=1; else for(i=1;i<=n;i++) dp[1][i]=1; for(i=2;i<=n;i++) { if(num[i]>0) solve(i,num[i]); else for(j=1;j<=n;j++) solve(i,j); } ans=0; for(i=1;i<=n;i++) ans+=dp[n][i]; printf("%lld\n",ans); }}
- uva 10401 Injured Queen Problem(dp)
- uva 10401 Injured Queen Problem(DP)
- Injured Queen Problem - UVa 10401 dp
- Uva 10401 Injured Queen Problem ( 计数DP)
- UVA - 10401 Injured Queen Problem(dp)
- uva 10401 Injured Queen Problem(DP)
- UVA 10401---Injured Queen Problem+DP
- UVA 10401Injured Queen Problem (dp)
- Injured Queen Problem+uva+dp
- uva 10401 Injured Queen Problem
- uva 10401 - Injured Queen Problem
- UVA - 10401 Injured Queen Problem
- uva 10401 - Injured Queen Problem
- UVA - 10401 Injured Queen Problem
- UVA - 10401 Injured Queen Problem
- UVA 10401 Injured Queen Problem
- uva 10401 Injured Queen Problem
- 10401 - Injured Queen Problem(dp)
- 翻译Android USB HOST API
- 廖雪峰的Git教程---确实是史上最易懂的Git教程 (有windows电脑和网络即可)
- 第十个凡事都
- POJ 3450 Corporate Identity
- 2014新生暑假个人排位赛07
- Injured Queen Problem - UVa 10401 dp
- 为了编译AVX代码,升级Redhat 5.5 GCC到4.7.1
- 操作系统内存管理
- java file文件类操作使用方法大全
- 输出定长度的数字
- Optimal Binary Search Tree - UVa 10304
- Ubuntu下DirectFB的编译安装,样例程序编译及运行体验
- C++ primer 第五版 第一部分 部分习题答案
- android Failed to initialize Monitor Thread: Unable to establish loopback conn问题详解