POJ - 3254 Corn Fields 状态压缩
来源:互联网 发布:知乎马前卒是谁 编辑:程序博客网 时间:2024/06/05 01:51
题目大意:有一个网格,网格上面有草地和荒地,现在要在这个方格上面放士兵,士兵只能放在草地上,不能放在荒地上,且士兵不能两两相连,问有多少种放士兵的方式(也可以一个士兵都不放)
解题思路:这题和POJ - 1185 炮兵阵地类似,是简单版的,就不详说了,poj有点坑啊,我的数组开小了,给出的是WA,找了半天没找到。。。
现在给出1185的链接
这里写链接内容
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define maxn 20#define maxm 5010#define mod 100000000int R, C;int row[maxn], state[maxm], dp[maxn][maxm];int cnt;void init() { memset(row, 0, sizeof(row)); memset(dp, 0, sizeof(dp)); int t; for(int i = 0; i < R; i++) for(int j = 0; j < C; j++) { scanf("%d", &t); if(!t) row[i] |= (1 << j); } cnt = 0; for(int i = 0; i < (1 << C); i++) { if(i & (i << 1)) continue; state[cnt++] = i; } for(int i = 0; i < cnt; i++) { if(state[i] & row[0]) continue; dp[0][i] = 1; } for(int r = 1; r < R; r++) for(int i = 0; i < cnt; i++) { if(state[i] & row[r]) continue; for(int j = 0; j < cnt; j++) { if(state[j] & row[r-1]) continue; if(state[i] & state[j]) continue; dp[r][i] = (dp[r-1][j] + dp[r][i]) % mod; } }}int solve() { int ans = 0; for(int i = 0; i < cnt; i++) ans = (ans + dp[R-1][i]) % mod; return ans;}int main() { scanf("%d%d", &R, &C); init(); printf("%d\n", solve()); return 0;}
0 0
- poj 3254 Corn Fields //状态压缩DP
- POJ 3254 Corn Fields 状态压缩DP
- poj 3254 Corn Fields(状态压缩dp)
- POJ 3254 Corn Fields (状态压缩DP)
- poj-3254-Corn Fields-状态压缩DP
- poj 3254 Corn Fields (状态压缩DP)
- Poj 3254 Corn Fields 状态压缩
- POJ 3254 Corn Fields (状态压缩DP)
- POJ 3254 Corn Fields(状态压缩)
- POJ 3254 Corn Fields(状态压缩dp)
- POJ 3254 Corn Fields 状态压缩dp
- POJ 3254 Corn Fields 状态压缩DP
- poj 3254 Corn Fields ,状态压缩DP
- poj Corn Fields 3254 状态压缩dp
- POJ 3254 Corn Fields 状态压缩
- poj 3254 Corn Fields (状态压缩DP)
- POJ 3254 Corn Fields(状态压缩)
- Poj 3254 Corn Fields(状态压缩)
- 编码规范之eclipse设置
- C++语言编程基础1
- 选择排序
- 《DirectX 9.0 3D 游戏开发编程基础》学习笔记#2 D3D初始化
- Union 和 Union All的区别
- POJ - 3254 Corn Fields 状态压缩
- 正则表达式基本概念
- 软件开发,一定意味着加班吗?
- 索引查找算法
- ScrollView滚动监听事件
- 【LintCode】 Single Number 落单的数
- 1558: 和与积
- windows下的redis安装使用简介
- 计算机网络体系结构