题目大意:

在矩阵(只有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的更多相关文章

  1. 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 ...

  2. 2019牛客多校第⑨场J Symmetrical Painting(思维,离散化)

    原题:https://ac.nowcoder.com/acm/contest/889/J 题意: 二维平面上有n个矩形,每个矩形左下角是(i−1,Li)(i−1,Li), 右上角是(i,Ri)(i,R ...

  3. 牛客多校第九场 J Symmetrical Painting 计算几何/扫描线

    题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积. 题解: 在随着对称轴上移的过程中,必然有一 ...

  4. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  5. 牛客NOIP暑期七天营-TG3 赛后题解

    目录 牛客NOIP暑期七天营-提高组3 A-破碎的矩阵 题目描述 link 题解 代码 B-点与面 题目描述 link 题解 代码 C-信息传递 题目描述 link 题解 牛客NOIP暑期七天营-提高 ...

  6. 牛客NOIP暑期七天营-TG1 赛后题解

    目录 牛客NOIP暑期七天营-提高组1 A-最短路 题目描述 link 题解 代码 B-最小生成链 题目描述 link 题解 代码 C-最小字典最短路 题目描述 link 题解 Update 牛客NO ...

  7. 牛客多校第一场 B Inergratiion

    牛客多校第一场 B Inergratiion 传送门:https://ac.nowcoder.com/acm/contest/881/B 题意: 给你一个 [求值为多少 题解: 根据线代的知识 我们可 ...

  8. 2019牛客多校第二场 A Eddy Walker(概率推公式)

    2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...

  9. 2019年牛客多校第一场B题Integration 数学

    2019年牛客多校第一场B题 Integration 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从 ...

随机推荐

  1. 在sublime上安装markdown插件(win10)

    1.markdown插件安装 --ctrl+shift+p --在命令框中选中 package control:install package 选中它  按回车 --在命令框中输入 markdown, ...

  2. JQuery简单实用的模板引擎

    1.在html界面声明模板(注意type类型) <script id="tmplInvokeProvider" type="text/x-jquery-tmpl&q ...

  3. 38 ubuntu/windows双系统安装

    0 引言 (1)针对bios 和 uefi引导,安装方式略有不同. (2)针对nvidia显卡,在安装时需要特殊设置. 1 EasyBCD安装方式介绍-适用于bios引导方式 参考百度经验贴安装即可, ...

  4. POJ2449-A*算法-第k短路

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门  原题目描述在最下面.  给你一个有向图,求指定节点间的第k短路. 思路:  先反向跑出从终点开始的到每个节点的最短距离 ...

  5. mac 安装配置使用 mongoldb

    mac 安装配置使用 mongoldb 安装和配置 brew install mongos brew install mongo # 密码就是用户的密码 # 配置数据文件 //如果不配置会出现错误62 ...

  6. Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...

  7. 解决ios10及以上Safari双击和双指缩放无法禁止的问题

    移动端web缩放有两种: 1.双击缩放: 2.双指手势缩放. 在iOS 10以前,iOS和Android都可以通过一行meta标签来禁止页面缩放 <meta content="widt ...

  8. ecshop 学习笔记

    ECSHOP各文件夹功能说明 1.根目录:前台程序文件2.admin:后台程序文件夹   --根目录:后台程序文件  *.php文件   --help\zh_cn:各功能的帮助文件 *.xml文件   ...

  9. ajax 接收json数据的进一步了解

    var url = "../searchclasses"; $.ajax({ url: url, type: "post", dataType: "j ...

  10. JS与Jquery的事件委托机制

    传送:http://www.ituring.com.cn/article/467 概念: 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委 ...