uva 10401 Injured Queen Problem(DP)
来源:互联网 发布:淘宝账号注册首页登录 编辑:程序博客网 时间:2024/05/20 16:01
uva 10401 Injured Queen Problem
题目大意:这是一个变形的N皇后问题,皇后不再是占据一行一列以及斜线,她占据的只是她周围的一圈以及她所在的一列。题目给出一个含有问号,数字和字母的字符串。第i个字符是问号代表皇后在第i列的任意一行,若第i个字符是数字或字母X(1~F)代表皇后在第i列的X行。求满足该字符串的摆放方式的方法一共有几种。
解题思路:从第一列开始往后递推。dp[i][j]表示的是结合j - 1列的摆放方式,将皇后放在(i, j)的位置会有几种情况。
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>#define N 30using namespace std;typedef long long ll;char s[N];int vis[N];ll dp[N][N];ll ans;int main() { while (scanf("%s", s + 1) != EOF) { ans = 0; memset(vis, 0, sizeof(vis)); memset(dp, 0, sizeof(dp)); int len = strlen(s + 1); for (int i = 1; i <= len; i++) { if (s[i] >= '1' && s[i] <= '9') { vis[i] = s[i] - '0'; } else if (s[i] >= 'A' && s[i] <= 'F') { vis[i] = s[i] - 'A' + 10; } } if (vis[1]) { dp[vis[1]][1] = 1; } else { for (int i = 1; i <= len; i++) { dp[i][1] = 1; } } for (int i = 2; i <= len; i++) { if (vis[i]) { for (int k = 1; k <= len; k++) { if (abs(vis[i] - k) > 1) { dp[vis[i]][i] += dp[k][i - 1]; } } } else { for (int j = 1; j <= len; j++) { for (int k = 1; k <= len; k++) { if (abs(j - k) > 1) { dp[j][i] += dp[k][i - 1]; } } } } } for (int i = 1; i <= len; i++) { ans += dp[i][len]; } printf("%lld\n", ans); } return 0;}
0 0
- UVA - 10401 Injured Queen Problem(dp)
- uva 10401 Injured Queen Problem(DP)
- UVA 10401Injured Queen Problem (dp)
- 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)
- 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
- JMS 服务器ActiveMQ Queue和Topic区别
- 解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)
- python解决字典中的值是列表问题的方法
- ListView的横向滚动(带表头与固定列)
- 2-9-1 复数类中的运算符重载(续)
- uva 10401 Injured Queen Problem(DP)
- ubuntu中apt-get dpkg应用出现的问题及解决方法
- AVL树C语言实现
- 二叉树的基本操作和遍历
- win32使用ATL显示C#COM窗体
- 【陈式兔子定理】本科生、硕士生、博士生、博士后之区别
- css中的:before 和 :after
- android摇一摇
- 【C++注意事项】2 变量声明和定义