284. 金字塔

2024-05-11 00:58
文章标签 284 金字塔

本文主要是介绍284. 金字塔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

算法分析:
对于一棵树,其dfs序是固定序列,这个序列和树是对应的。因此,树的不少问题,都可以转化为序列求解。本题基本思路是这样的。

f [ i ] [ j ] f[i][j] f[i][j]表示区间 [ i , j ] [i,j] [i,j]构成的子树的不同结构数。这个状态只有在满足 s [ i ] = s [ j ] s[i]=s[j] s[i]=s[j]的时候,才可能有意义,否则为0。

枚举断点 k k k f [ i ] [ j ] = f [ i ] [ j ] + f [ i + 1 ] [ k − 1 ] ∗ f [ k ] [ j ] f[i][j] = f[i][j] + f[i+1][k-1] * f[k][j] f[i][j]=f[i][j]+f[i+1][k1]f[k][j]

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define ll long long int
const int P = 1000000000;
char s[310];
int n;
ll f[310][310];
int main()
{scanf("%s", s + 1);n = strlen(s + 1);memset(f, 0, sizeof(f));for (int i = 1; i <= n; ++i) f[i][i] = 1;for (int len = 2; len <= n; ++len)for (int i = 1; i < n; ++i){int j = i + len - 1;if (j > n) continue;if (s[i] == s[j]){for (int k = i + 2; k <= j; ++k)f[i][j] = (f[i][j] + f[i+1][k-1] * f[k][j]) % P;}}	printf("%lld\n", f[1][n]);return 0;
}

以下是记忆化搜索版本:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define ll long long int
const int P = 1000000000;
char s[310];
int n;
ll f[310][310];
ll dfs(int l, int r)
{if (l > r) return 0;if (l == r) return 1;if (s[l] != s[r]){f[l][r] = 0;return 0;}if (f[l][r] != -1) return f[l][r];f[l][r] = 0;for (int k = l + 2; k <= r; ++k)if (s[l] == s[k])f[l][r] = (f[l][r] + dfs(l+1, k-1) * dfs(k, r)) % P;return f[l][r];
}
int main()
{scanf("%s", s + 1);n = strlen(s + 1);memset(f, -1, sizeof(f));dfs(1, n);printf("%lld\n", f[1][n]);return 0;
}

这篇关于284. 金字塔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

CF#284 (Div. 2) C.(几何规律)

题目链接:http://codeforces.com/contest/499/problem/C 解题思路: 把两个点的坐标分别带入方程组,如果最后两个值相乘为负,即异号,计数器++。其中有一个有趣的现象,从A到B的最短步数,可以变化为求A和B之间夹了多少条直线,那么最后只要求出直线数,即可求出最小步数。 如果一条直线夹在A和B中间,那么把A和B的坐标带入后,所得值相乘一定为负。数据很

CF #284 (Div. 2) A.(模拟)

题目链接:http://codeforces.com/contest/499/problem/A 解题思路: 模拟过程,如果step + x < k[i].l,那么跳过x分钟;否则计数器 + k[i].l - step + (k[i].r - k[i].l),更新step为k[i].r + 1,同时i ++ 。 完整代码: #include <functional>#in

CF#284 (Div. 2) B.(暴力)

题目链接:http://codeforces.com/contest/499/problem/B 解题思路: 开一个is变量记录每组单词最后应该输出哪个。最后每次把原来的数组暴力扫一遍即可。 完整代码: #include <functional>#include <algorithm>#include <iostream>#include <fstream>#inc

以人口金字塔图为例,在线绘制左右双侧堆叠条形图

导读: 人口金字塔(population pyramids)用于展示一个特定人口的年龄和性别分布。本质上是一种水平条形图。左侧是男性的数据,右侧是女性的数据。 Proc Natl Acad Sci U S A.文章《Demographic change and assimilation in the early 21st-century United States》fig 1的人口金字

PMP–知识卡片--SCQA金字塔表达

SCQA模型通过四个关键元素:情景+冲突+疑问+答案,建立了一个精确而有逻辑的表达框架。同时,它也能够帮助你构建合理的逻辑链条,让别人更容易理解和接受你的观点。 情景:通过描述背景和现状引入话题,这个元素帮助别人了解你要讨论的具体情况,并为接下来的表达打下基础。 冲突:介绍完情景之后,引入一个核心问题、挑战或者冲突,以激起别人的兴趣和好奇心。 疑问:在抛出冲突之后,引出一个明确的问题,这个问题将激

金字塔原理读后感

读这本书的初衷是需要写答辩ppt,由于自己的语言表达能力欠佳,ppt也写的很烂,所以急切希望改变这种窘境,不想一年的努力就这样败在最后的答辩上。 语言表达能力差,一方面和文化修养有关系,另一个主要的影响因素就是语言组织和逻辑能力有关。而金字塔原理在这方面是公认教科书级别的。由于文化修养无法快速提升,只好从思维逻辑和语言组织上入手。 如何开头? 对于答辩,开头如同一篇文章的序言。可以从SCQA上

谷粒商城实战笔记-284-商城业务-分布式事务-本地事务隔离级别传播行为等复习

文章目录 一,ACID原则1. 原子性 (Atomicity)2. 一致性 (Consistency)3. 隔离性 (Isolation)4. 持久性 (Durability) 二,隔离级别1,简介2,举例说明2.1 读未提交 (Read Uncommitted)2.2 读已提交 (Read Committed)2.3 可重复读 (Repeatable Read)2.4 序列化 (Seria

OpenCV中使用金字塔LK光流法(上)

有关金字塔LK光流法的原理,可参考这篇文章金字塔LK光流法数学原理学习笔记_lk光流 论文-CSDN博客。这里我们讲解OpenCV中实现的金字塔LK光流法的相关API,并通过一个demo来学习如何使用它。         首先介绍一些API,它们是光流法流程中会用到的功能函数,之后再介绍calcOpticalFlowPyrLK()。 1. cornerHarris() vo

284. 超市卖货-----HZOJ

一、题目: 超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润. ​ 每天只能卖一个商品. ​ 现在你要让超市获得最大的利润. 输入 ​ 每组数据第一行为一个整数N(0<N≤10000), 即超市的商品数目 ​ 之后N行,每行各有两个整数, 第i行为pi,di(1<=pi,di<=10000) 输出 ​ 输出当前条件下超市的最大利润. 二、样例

CV-笔记-重读特征金字塔网络 (FPN)

目录 结构实现细节基于特征金字塔(FPN)的RPN打labelFPN的ROI pooling参数细节Region Proposal with RPNObject Detection with Fast/Faster R-CNN 对于网络的卷积特征的几个重要理解: 但由于深度不同,导致了不同层较大的语义差异。高分辨率图的低层特征损害了其对目标识别的表征能力。语义差异:语义差异就