牛客集训第七场J /// DP
题目大意:
在矩阵(只有52种字符)中找出所有不包含重复字符的子矩阵个数
#include <bits/stdc++.h>
#define ll long long
using namespace std; int n,m;
char G[][];
int lr[][], ud[][];
int pos[], len[]; int main()
{
while(~scanf("%d%d",&n,&m)) {
for(int i=;i<=n;i++) scanf("%s",G[i]+);
for(int i=;i<=n;i++) {
memset(pos,,sizeof(pos));
for(int j=;j<=m;j++) {
lr[i][j]=min(lr[i][j-]+,j-pos[G[i][j]-'A']);
pos[G[i][j]-'A']=j;
}
}
for(int j=;j<=m;j++) {
memset(pos,,sizeof(pos));
for(int i=;i<=n;i++) {
ud[i][j]=min(ud[i-][j]+,i-pos[G[i][j]-'A']);
pos[G[i][j]-'A']=i;
}
}
/* 若固定右下角
且只看一个因素(长度或高度),忽略另一个因素
则高度(长度)多大 划分方案就有多少种
如高度(长度)为3 划分方案就恰好3种 用一个极端的样例说明
ABC 固定C为右下角的划分方案只有三种
即 C、BC、ABC 三种
*/
ll ans=;
for(int j=;j<=m;j++) {
memset(len,,sizeof(len));
for(int i=;i<=n;i++) { /// 求以G[i][j]为右下角的划分方案 for(int k=;k<lr[i][j];k++) { /// 在i行 j列(右界)向左k长度
len[k]=min(len[k]+,ud[i][j-k]); // 控制高度
/// 由i-1行扩展而来有 len[k]+1 种划分
/// 由i行j-k列(左界)控制的 ud[i][j-k] 高度,超过这个高度会有重复
// 不用纠结在左右界只间有更小的高度 这个问题会在 长度控制 时被制约到
/// 两者中取小 控制不重复 if(k) len[k]=min(len[k],len[k-]); // 控制长度
/// k长度的划分 不可能多于 k-1长度的划分
ans+=len[k];
} for(int k=lr[i][j];k<;k++) len[k]=;
}
}
printf("%lld\n",ans);
} return ;
}
牛客集训第七场J /// DP的更多相关文章
- 2019 牛客网 第七场 H pair
题目链接:https://ac.nowcoder.com/acm/contest/887/H 题意: 给定A,B,C问在[1,A]和[1,B]中有多少对x,y满足x&y>C或者x^y ...
- 2019牛客多校第⑨场J Symmetrical Painting(思维,离散化)
原题:https://ac.nowcoder.com/acm/contest/889/J 题意: 二维平面上有n个矩形,每个矩形左下角是(i−1,Li)(i−1,Li), 右上角是(i,Ri)(i,R ...
- 牛客多校第九场 J Symmetrical Painting 计算几何/扫描线
题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积. 题解: 在随着对称轴上移的过程中,必然有一 ...
- 2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...
- 牛客NOIP暑期七天营-TG3 赛后题解
目录 牛客NOIP暑期七天营-提高组3 A-破碎的矩阵 题目描述 link 题解 代码 B-点与面 题目描述 link 题解 代码 C-信息传递 题目描述 link 题解 牛客NOIP暑期七天营-提高 ...
- 牛客NOIP暑期七天营-TG1 赛后题解
目录 牛客NOIP暑期七天营-提高组1 A-最短路 题目描述 link 题解 代码 B-最小生成链 题目描述 link 题解 代码 C-最小字典最短路 题目描述 link 题解 Update 牛客NO ...
- 牛客多校第一场 B Inergratiion
牛客多校第一场 B Inergratiion 传送门:https://ac.nowcoder.com/acm/contest/881/B 题意: 给你一个 [求值为多少 题解: 根据线代的知识 我们可 ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- 2019年牛客多校第一场B题Integration 数学
2019年牛客多校第一场B题 Integration 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从 ...
随机推荐
- C++11的闭包(lambda、function、bind)
c++11开始支持闭包,闭包:与函数A调用函数B相比较,闭包中函数A调用函数B,可以不通过函数A给函数B传递函数参数,而使函数B可以访问函数A的上下文环境才可见(函数A可直接访问到)的变量:比如: 函 ...
- bzoj1026题解
[解题思路] 数位DP.f[i][j]表示以j结尾的i位数中windy数的个数,转移方程f[i][j]=Σf[i-1][k](|j-k|>1). 基于f数组,我们可以统计出1~n内的windy数 ...
- 给标签设置disabled属性后提交不了数据
项目中遇到给select标签添加disabled属性然后提交表单的时候不能提交该表单的数据到后台, readonly属性对提交数据没有限制,但是readonly属性对radio.select.chec ...
- 其它课程中的python---1、python基础
其它课程中的python---1.python基础 一.总结 一句话总结: 可以先把视频平台搭起来,这样学习效率会高很多,而且有额外收益 1.python的优势有哪些? 一个广泛的标准库 扩展性:比如 ...
- Apache负载均衡
Apache负载均衡 Apache也是可以实现负载均衡的.Apache的负载均衡主要是通过mod_proxy_balancer实现的.那么,apache负载均衡的配置方法是什么样的? 在apache的 ...
- Mysql命令增加、修改、删除表字段
alter add 命令用来增加表的字段: alter add命令格式:alter table 表名 add字段 类型 其他:如下所示: ) comment '单位' alter drop 命令删除表 ...
- centos安装完php-fpm、nginx后访问网站出现权限问题
nginx.conf www.conf 这两个文件上面改用户为www. 如果不知道自己的配置文件位置问题,使用命令查找文件位置: find / -name 'nginx.conf' -print 添加 ...
- 用solr DIH 实现mysql 数据定时,增量同步到solr
基础环境: (二)设置增量导入为定时执行的任务: 很多人利用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题. 但 ...
- Python3实用编程技巧进阶✍✍✍
Python3实用编程技巧进阶 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- 2019-2020 ACM-ICPC Latin American Regional Programming Contest
代码见:戳 easy: EIM medium-easy: BDFKL medium: ACJ medium-hard: H A - Algorithm Teaching 题意 给一些集合,现从每个集合 ...