1126: [POI2008]Uci
1126: [POI2008]Uci
https://lydsy.com/JudgeOnline/problem.php?id=1126
分析:
dp。状态很妙,就是有点难写。
能走的是一个矩形。首先考虑从x,y只能往左拐,到n,1的方案数。矩形是增加的。然后f[u][l][d][r][0/1/2/3]表示上边界u,左边界l,下边界d,右边界r的矩形,在左上角/右下角/左下角/左上角的方案数。
然后考虑这个从这个点可以沿着原来的方向走一步。或者拐弯(拐弯后直接到下一个角上,比如在右下角,拐弯后到右上角)。
初始值设为可以到x,y的,所有的点,尽管这些状态是不存在的。
空间开不下,把第一维滚动掉。
(开始想的的“推”的dp,这样的话初始值就比较方便了,但是就无法滚动第一维了)
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int y=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())y=y*+ch-'';return y*f;
} const int N = ; int sr[N][N], sc[N][N], f[][N][N][N][];
char s[N];
int mod; inline void add(int &x,int y) {
x += y; if (x >= mod) x -= mod;
} int main() {
int n = read(), m = read();mod = read();int x = read(), y = read();
for (int i = ; i <= n; ++i) {
scanf("%s", s + );
for (int j = ; j <= m; ++j) {
sr[i][j] = sr[i][j - ] + (s[j] == '+');
sc[i][j] = sc[i - ][j] + (s[j] == '+');
}
}
int ans = ;
f[][x][y][x][] = ;
f[][x][y][x - ][] = ;
f[][x][y - ][x][] = ;
f[][x + ][y][x][] = ; for (int u = y, now = ; u >= ; --u, now ^= ) {
if (u != y) memset(f[now], , sizeof(f[now]));
for (int l = x; l >= ; --l)
for (int d = y; d <= n; ++d)
for (int r = x; r <= m; ++r) {
if (sc[d][r] - sc[u - ][r] == d - u + ) {
f[now][l][d][r][] = f[now][l][d][r - ][];
if (u < d) add(f[now][l][d][r][], f[!now][l][d][r][]);
}
if (sr[d][r] - sr[d][l - ] == r - l + ) {
f[now][l][d][r][] = f[now][l][d - ][r][];
if (l < r) add(f[now][l][d][r][], f[now][l][d][r - ][]);
}
if (sc[d][l] - sc[u - ][l] == d - u + ) {
f[now][l][d][r][] = f[now][l + ][d][r][];
if (u < d) add(f[now][l][d][r][], f[now][l][d - ][r][]);
}
if (sr[u][r] - sr[u][l - ] == r - l + ) {
f[now][l][d][r][] = f[!now][l][d][r][];
if (l < r) add(f[now][l][d][r][], f[now][l + ][d][r][]);
}
if (u == y && d == y && l == x && r == x) {
f[][x][y][x][] = ;
f[][x][y][x - ][] = ;
f[][x][y - ][x][] = ;
f[][x + ][y][x][] = ;
}
if (l == && d == n) add(ans, f[now][l][d][r][]);
}
}
cout << ans;
return ;
}
1126: [POI2008]Uci的更多相关文章
- BZOJ1126: [POI2008]Uci
$n \leq 100,m \leq 100$,$n*m$的01矩形,问从左下角开始往上走,每次转弯只能向右,不能经过重复点,不能撞到1,到达点$(x,y)$的方案数,$mod \ \ k$. 感人肺 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [BZOJ1112][POI2008]砖块Klo
[BZOJ1112][POI2008]砖块Klo 试题描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另 ...
- [bzoj1122][POI2008]账本BBB
1122: [POI2008]账本BBB Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 402 Solved: 202[Submit][Status ...
- BZOJ 1113: [Poi2008]海报PLA
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1025 Solved: 679[Submit][Statu ...
- BZOJ 1116: [POI2008]CLO
1116: [POI2008]CLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 922 Solved: 514[Submit][Status][ ...
- BZOJ 1112: [POI2008]砖块Klo
1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1736 Solved: 606[Submit][Statu ...
- BZOJ 1124: [POI2008]枪战Maf
1124: [POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 617 Solved: 236[Submit][Status ...
- BZOJ 1123: [POI2008]BLO
1123: [POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1030 Solved: 440[Submit][Status] ...
随机推荐
- DTCoreText 、WKWebView 、UIWebView的比较
DTCoreText .WKWebView .UIWebView的比较 HTML->View 数据解析: WebCore:排版引擎核心,WebCore包含主要以下模块:Loader, Parse ...
- 以太网,IP,TCP,UDP数据包分析
http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 网络层的IP 协议是构成Internet 的基础.IP 协议不保证传 ...
- 24、springboot与缓存(2)
具体看上文!!! @Service public class EmpService { @Autowired EmployeeMapper employeeMapper; @Cacheable(cac ...
- Kali-linux Gerix Wifi Cracker破解无线网络
Gerix Wifi Cracker是另一个aircrack图形用户界面的无线网络破解工具.本节将介绍使用该工具破解无线网络及创建假的接入点. 9.3.1 Gerix破解WEP加密的无线网络 在前面介 ...
- 剑指offer 最小的k个数 、 leetcode 215. Kth Largest Element in an Array 、295. Find Median from Data Stream(剑指 数据流中位数)
注意multiset的一个bug: multiset带一个参数的erase函数原型有两种.一是传递一个元素值,如上面例子代码中,这时候删除的是集合中所有值等于输入值的元素,并且返回删除的元素个数:另外 ...
- php版本跟扩展模块版本不兼容问题
安装redis扩展后查看时候出现了这样报错: [root@localhost phpredis-develop]# php -m | grep redisPHP Warning: PHP Startu ...
- 404 Note Found 队-Alpha9
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- 软工之 NABCD 模型分析及 Web of Paper 原型设计结对作业
目录 写在前面 NABCD 模型 N -- Need,需求 A -- Approach,方法 B -- Benefits,好处 C -- Compettors,竞争 优势 劣势 D -- Delive ...
- Failed to read artifact descriptor for org.apache.maven.plugins:maven-jar-plugin
在更新maven项目的时候出现许多jar包找不到的问题,但是在本地仓库中查找的时候包含这些jar包. 解决办法: 把所有报错缺少的jar包所在的文件夹删掉,重新更新maven项目,重新下载完成后错误解 ...
- Python的迭代器与装饰器
'''迭代器:两个基本方法:iter()和next()迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合等第一个元素开始访问,直到所有的元素被访问结束,迭代器只能往前不会后退. 迭代器有两个基本 ...