2018多校第九场 HDU 6416 (DP+前缀和优化)
转自:https://blog.csdn.net/CatDsy/article/details/81876341
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset((a),(b),sizeof(a))
#define pi acos(-1)
#define pii pair<int,int>
const int INF = 0x3f3f3f3f;
const double eps = 1e-;
const int MAXN = 2e3 + ;
const int MAXM = 2e6 + ;
const ll mod = ; char s[MAXN][MAXN];
ll tot[MAXN][MAXN], same[MAXN][MAXN];
ll pre_tot[MAXN][MAXN], pre_same[MAXN][MAXN]; int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
int t;
scanf("%d",&t);
while(t--) {
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i = ; i <= n; i++)
scanf("%s",s[i] + );
for(int i = ; i <= n; i++)
pre_tot[i][] = pre_same[i][] = ;
for(int i = ; i <= m; i++) {
tot[][i] = ;
pre_tot[][i] = i;
if(i == || s[][i] != s[][i - ]) same[][i] = ;
else same[][i] = ;
pre_same[][i] = pre_same[][i - ] + same[][i];
}
for(int i = ; i <= n; i++) {
for(int j = ; j <= m; j++) {
int l = max(j - k, ), r = min(j + k, m);
tot[i][j] = (pre_tot[i - ][r] - pre_tot[i - ][l - ] + mod) % mod;
l = max(j - k + , ), r = min(j + k, m);
tot[i][j] = (tot[i][j] - (pre_same[i - ][r] - pre_same[i - ][l - ] + mod) % mod + mod) % mod;
pre_tot[i][j] = (pre_tot[i][j - ] + tot[i][j]) % mod;
if(j == || s[i][j] != s[i][j - ]) same[i][j] = ;
else {
l = max(j - k, ), r = min(j + k - , m);
same[i][j] = (pre_tot[i - ][r] - pre_tot[i - ][l - ] + mod) % mod;
l = max(j - k + , ), r = min(j + k - , m);
same[i][j] = (same[i][j] - (pre_same[i - ][r] - pre_same[i - ][l - ] + mod) % mod + mod) % mod;
}
pre_same[i][j] = (pre_same[i][j - ] + same[i][j]) % mod;
}
}
ll ans = ;
for(int i = ; i <= m; i++)
ans = (ans + tot[n][i] - same[n][i] + mod) % mod;
printf("%lld\n",ans);
}
return ;
}
题目描述:
给定一个N∗MN∗M的01矩阵
K-seam是满足以下条件的整数序列a:
- |a|=n,ai∈[1,m]|a|=n,ai∈[1,m]
- |ai−ai+1|≤K,i∈[1,n)|ai−ai+1|≤K,i∈[1,n)
对于第ii行,删除第aiai个数,会得到一个N∗(M−1)N∗(M−1)的矩阵
不同的整数序列可能会得到相同的矩阵
问:可以得到多少种不同的矩阵
题解:
如果无视different的条件
定义状态:dp[i][j]dp[i][j]——删除第 ii 行第 jj 个数可以得到的矩阵总数
可推得转移方程如下:
在此基础上,加上different的条件
定义状态:
- tot[i][j]tot[i][j]——删除第 ii 行第 jj 个数可以得到的不同的矩阵总数
- same[i][j]same[i][j]——删除第 ii 行第 jj 个数和删除第 ii 行第 j−1j−1 个数后得到的相同方案数
那么,tot[i][j]tot[i][j]的状态转移方程为:
如果 Matrix[i][j]≠Matrix[i][j−1]Matrix[i][j]≠Matrix[i][j−1] 那么,same[i][j]=0same[i][j]=0
否则,对于第 jj 个和第 j−1j−1 个的转移区间分别为[j−k,j+k][j−k,j+k],[j−1−k,j−1+k][j−1−k,j−1+k],那么它们的交叉区间为[j−k,j−1+k][j−k,j−1+k],即:从该区间内转移得到的方案数会重复计算一次。得到 same[i][j]same[i][j] 的转移方程为:
时间复杂度为O(n∗m2)O(n∗m2),对于∑∑做前缀和优化,时间复杂度降为O(n∗m)O(n∗m)
最后,对于第n行计算总的不同的方案数,即ans=∑tot−∑same
2018多校第九场 HDU 6416 (DP+前缀和优化)的更多相关文章
- 2018多校第九场1004(HDU 6415) DP
本以为是个找规律的题一直没找出来... 题目:给你一个n*m的矩阵和1-n*m个数,问有多少种情况满足纳什均衡的点只有一个.纳什均衡点是指这个元素在所在行和所在列都是最大的. 思路:吉老师直播的思路: ...
- 2018多校第九场1010 (HDU6424) 数学
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6424 解法:找规律.因为最多三项,a1^a2^a3可以拆成(a1+2)+(a2+1)*a3,然后建成数 ...
- 218多校第九场 HDU 6424 (数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6424 题意:定义f(A) = log log log log …. (A个log) n ,g[A,B, ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- [Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列)
[Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列) 题面 两个人玩游戏,共进行t轮,每人每轮从[-k,k]中选出一个数字,将其加到自己的总分中.已 ...
- T2988 删除数字【状压Dp+前缀和优化】
Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...
- 2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)
咕咕咕了太久 多校博客直接从第三场跳到了第九场orz 见谅见谅(会补的!) 明明最后看下来是dp场 但是硬生生被我们做成了组合数专场…… 听说jls把我们用组合数做的题都用dp来了遍 这里只放了用组 ...
- Codeforces 479E. Riding in a Lift (dp + 前缀和优化)
题目链接:http://codeforces.com/contest/479/problem/E 题意: 给定一个启示的楼层a,有一个不能去的楼层b,对于你可以去的下一个楼层必须满足你 ...
- Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6308 Time Zone Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- HashMap集合-遍历方法
# HashMap集合-遍历方法 先定义好集合: public static void main(String[] args) { Map<String,String> onemap=ne ...
- RMI(远程方法调用)
Remote Method Invocation 跨虚拟机间调用 使用 RMI 技术可轻松将 服务提供者(Service Provider)与 服务消费者(Service Consumer)进行分离 ...
- HDU 3642 求体积交集
Get The Treasury 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3642 Problem Description Jack knows ...
- c++ 之private /protect/ public
C++中public.protect.private的访问权限控制 访问权限 一个类的public成员变量.成员函数,可以通过类的成员函数.类的实例变量进行访问 一个类的protected成员变量.成 ...
- Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)
(1)原理: “NX Bit”的漏洞缓解:使某些内存区域不可执行,并使可执行区域不可写.示例:使数据,堆栈和堆段不可执行,而代码段不可写. 在NX bit打开的情况下,基于堆栈的缓冲区溢出的经典方法将 ...
- S02_CH14_ EMIO_OLED 实验
S02_CH14_ EMIO_OLED 实验 本章将使用EMIO模拟OLED的时序来驱动OLED,本方案对米联系列Miz702,Miz702N和Miz701N全兼容. 14.1板载OLED硬件原理 M ...
- 【规律】A Rational Sequence
题目描述 An infinite full binary tree labeled by positive rational numbers is defi ned by:• The label of ...
- Vasya's Function CodeForces - 837E (gcd)
大意: 给定$a,b$, $1\le a,b\le 1e12$, 定义 $f(a,0)=0$ $f(a,b)=1+f(a,b-gcd(a,b))$ 求$f(a,b)$. 观察可以发现, 每次$b$一定 ...
- iview-admin部署linux nginx报500错误的问题记录
遇到个新服务器部署iview-admin之后 在nginx配置文件有个user配置项 这里需要配置为root或者可以读取本地文件的用户 站点配置如下 server { listen ; server_ ...
- SIP中第三方呼叫控制(3PCC)建立流程
1.引言 在传统的电话网环境中,第三方呼叫控制允许一个实体(这里称为控制器- controller) 建立并管理另外的两方或多方之间的通信关系,而其本身并不参与通信. 第三方呼叫控制经常用于运营商业务 ...