牛客集训第七场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 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从 ...
随机推荐
- 小程序生成海报:通过 json 配置方式轻松制作一张海报图
背景 由于我们无法将小程序直接分享到朋友圈,但分享到朋友圈的需求又很多,业界目前的做法是利用小程序的 Canvas 功能生成一张带有二维码的图片,然后引导用户下载图片到本地后再分享到朋友圈.而小程序 ...
- bzoj3505: [Cqoi2014]数三角形 [数论][gcd]
Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和 ...
- Java中配置环境变量
在系统环境变量中设置: ClASSPATH中输入: ".;C:\Program Files\Java\jdk1.7.0_07\jre\lib\rt.jar;"//java的安装目录 ...
- GetWindowLong
函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值. 函数原型:LONG GetWindowLong(HWND hWnd,int nlndex): 参数: ...
- Feign Request header is too large
Feign远程调用时数据量过大报错 看异常提示猜测Feign在请求其他服务时,将数据存在了header,导致数据量过大报错 MultiValueMap<String, String> pa ...
- Centos6.5安装rar5.3
linux下使用最多的压缩工具是gzip,zip等,如果需要使用rar,就必须编译安装了,以下是编译安装rar教程: 一.安装支持库yum install -y gcc gcc-c++ autocon ...
- css样式高级技巧-选择器
用<div>元素为网页 在编写样式表时,我们经常要用div元素来包装内容: <div> <p>Here are two paragraphs of content& ...
- anjs 分词器初步使用
由于ik没有歧义分词的功能,打算用anjs 对前端传递过来的数据用anjs进行分词 anjs 操作文档官网地址:http://nlpchina.github.io/ansj_seg/ 刚刚开始由于ja ...
- 移动端dialog组件
移动端dialog组件 dialogView是满足移动端下,用户自定义的dialog组件,API可扩展性强,使用便捷.现版本是基于jquery库编写的,在使用之前需要引入jquery库或者Zepto库 ...
- iOS开发系列-异常处理
概述 在开发中经常调用苹果的API遇到数组越界.实例方法不存在运行时等致命错误,此时程序直接奔溃.其实苹果是在函数内部抛出了一个异常.这样告诉开发者需要检查代码做修改.同样在我们自己封装一些框架或者功 ...