D. Rarity and New Dress【DP】【以一个点向上延伸的最长边长为DP】

2024-02-29 12:50

本文主要是介绍D. Rarity and New Dress【DP】【以一个点向上延伸的最长边长为DP】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

D. Rarity and New Dress

题意

image-20201105151456434

给出一个矩阵,求一下矩阵中类似图中斜方体的个数。

思路

DP:f[i] [j] :表示(i , j)这个位置,往上可以延伸的最大斜方体的边长(不是高度)

那么f(i,j) = x就可以组合出来x种斜方体。

关于f(i,j) 的推导:f(i,j) 恰好是:(i-1,j-1) 、(i-1,j+1 ) 、(i,j-2) 这三个点的最小值。转移条件为:那四个点一样,

代码

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int N=1e6+100;
typedef long long ll;
typedef pair<int,int>pll;
ll f[3010][3010];
int n,m;
char a[3010][3010];
int main()
{cin>>n>>m;for(int i=2;i<=n+1;i++)scanf("%s",a[i]+1);for(int i=2;i<=n+1;i++)for(int j=1;j<=m;j++){if((a[i-1][j-1] == a[i][j]) && (a[i][j] == a[i-1][j] )&& (a[i][j] == a[i-1][j+1]) && (a[i][j]==a[i-2][j])) f[i][j]=min(min(f[i-1][j-1],f[i-1][j+1]),f[i-2][j]) +1;else f[i][j]=1;}ll res=0;// for(int i=2;i<=n+1;i++)// {//     for(int j=1;j<=m;j++)//         cout<<f[i][j]<<' ';//     cout<<endl;// }for(int i=2;i<=n+1;i++)for(int j=1;j<=m;j++)res+=f[i][j];cout<<res<<endl;return 0;
}

这篇关于D. Rarity and New Dress【DP】【以一个点向上延伸的最长边长为DP】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758862

相关文章

LeetCode:经典题之141、142 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录141. 环形链表常量因子 1

LeetCode:经典题之389 题解与延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录389.找不同哈希表

上海邀请赛 A题目 HDU 5236(dp)

先求出没有ctrl+s的时候构造长度为i的期望f[i] 。然后枚举保存的次数,求出最小即可。 #include<cstdio>#include<cstdio>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<iostream>#include<map>

poj 3160 Father Christmas flymouse 强连通+dp

首先我们可以确定的是,对于val值小于0的节点都变成0.   假设一个集合内2个房间都能任意到达,那么我就可以吧集合内的所有点的价值都取到,并且可以达到任一点。实际上集合内的每个点是相同的,这样的集合就是一个强连通分量。 那么我们就可以用tarjin算法进行强连通缩点, 最后形成一个dag的图。在dag的图上面进行dp。可以先用拓扑排序后dp。或者建反响边记忆化搜索 。 VIEW

秋招突击——6/22——复习{区间DP——加分二叉树,背包问题——买书}——新作{移除元素、实现strStr()}

文章目录 引言复习区间DP——加分二叉树个人实现 背包问题——买书个人实现参考实现 新作移除元素个人实现参考思路 找出字符串中第一个匹配项的下标个人实现参考实现 总结 引言 今天做了一个噩梦,然后流了一身汗,然后没起来,九点多才起床背书。十点钟才开始把昨天那道题题目过一遍,然后十一点才开始复习题目,为了不耽误下午的时间,所以这里的就单纯做已经做过的题目,主打一个有量,不在学

最长考拉兹序列

题目:  考虑如下定义在正整数集上的迭代规则:  n    n/2 (若n为偶数) n    3n+1 (若n为奇数) 从13开始,可以迭代生成如下的序列:         13  40  20  10  5  16  8  4  2  1 可以看出这个序列(从13开始到1结束)共有10项。 尽管还未被证明,但普遍认为,从任何数开始最终都能抵达1并结束, 这被称为 “考拉兹序列”。

github 报错 git fatal: unable to write new index file

错误一:git fatal: unable to write new index file主要原因就是服务器磁盘空间不够导致的,增加服务器空间就OK了在百度上面搜索没得到什么有效信息,在gooogle上搜索得到很多有效信息 Finding large directories with something like the following helped clean up some log fi

Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接

在进行参数化读取时发现一个问题: 发现问题: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8081): Max retries exceeded with url: /jwshoplogin/user/update_information.do (Caused by NewConn

动态规划DP--斐波那契数、爬楼梯、使用最小花费爬楼梯等示例代码

动态规划DP 文章目录 动态规划DP509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯62. 不同路径63. 不同路径II343.整数拆分 509. 斐波那契数 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) =

“序列优化探究:最长上升子序列的算法发现与应用“

最长上升子序列 最长上升子序列是指在一个给定序列中,找到一个最长的子序列,使得子序列中的元素单调递增。例如,序列 [1, 3, 5, 4, 7] 的最长上升子序列是 [1, 3, 5, 7],长度为4。 这是一个经典的动态规划问题。 假设dp[i]表示以第i个元素为结尾的最长上升子序列的长度。 可以用一个嵌套循环来遍历所有的元素对,如果前一个元素小于后一个元素,则可以将后一个元素添加到