Exploring Pyramids【动态规划——区间DP】

Exploring Pyramids

 UVALive - 3516 

题目传送门

题目大意:给你一个字符串,其代表的是机器人来回走过的路径,机器人总是先走左边再走右边,问有多少种情况。

解决方法:设输入序列为S,d(i,j)为子序列Si,Si+1,…,Sj对应的树的个数,则可以发现d(i,i)=1;并且Si不等于Sj时d(i,j)=0(因为起点和终点应该是同一点)。在其他情况下,设第一个分支在Sk时回到树根(必须有Si=Sk),则这个分支对应的序列是Si+1…Sk-1,方案数为d(i+1,k-1);其他分支对应的访问序列为Sk,…Sj,方案数为d(k.j)。这样,在非边界情况,递推关系为; 
d(i,j)=sigma{d(i+1,k-1)*d(k,j)|i+2<=k<=j,Si=Sk=Sj}。

AC代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e3 + 5;
const ll mod = 1e9;
char str[maxn];
ll dp[maxn][maxn];
int main() 
{//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);ios::sync_with_stdio(0),cin.tie(0);while(scanf("%s",str)!=EOF){ms(dp);int len=strlen(str);rep(i,0,len) {dp[i][i]=1;}for(int t=0;t<len;t++) {for(int l=0;l+t<len;l++){int r=l+t;for(int k=l+2;k<=r;k++){if(str[l+1]==str[k-1]&&str[k]==str[r]){dp[l][r]=(dp[l][r]+dp[l+1][k-1]*dp[k][r])%mod;}}}}printf("%lld\n",dp[0][len-1]);}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Investigating Div-Sum Property【数位DP】

Investigating Div-Sum Property UVA - 11361 题目传送门 题目大意&#xff1a;输入三个数a,b,k&#xff0c;问从a到b中有多少个数满足数字能够整除k&#xff0c;并且其数位和也能整除k。 解决方法&#xff1a;数位DP的模板题&#xff0c;Dp[x]表示在不超过x的数中满足条件…

UVA - 455 Periodic Strings【字符串】

Periodic Strings UVA - 455 题目传送门 题目大意&#xff1a;先输入一个数字n&#xff0c;在输入n行字符串&#xff0c;对每一个字符串输出其最小的周期长度&#xff0c;每两个输出间有一空行。 AC代码&#xff1a; #include <cstdio> #include <iostream> #…

螺旋方阵问题【数组】

输入n&#xff0c;输出n阶螺旋方阵&#xff0c;下面为5阶螺旋方阵&#xff1a;1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 下面为我的代码&#xff1a; #include <cstdio> #include <iostream> #include &…

马鞍点问题【数组】

如果在一矩阵中元素A[i][j]满足A[i][j]为第i行的最小值&#xff0c;第j行的最大值&#xff0c;则称这个元素为这个矩阵的马鞍点&#xff0c;求m*n矩阵所有的马鞍点。若需求一个矩阵的所有马鞍点&#xff0c;其实只需将矩阵的每行的最小值与每列的最大值分别求出存在相应的数组中…

Ping pong【树状数组】

Ping pong UVALive - 4329 题目传送门 题目大意&#xff1a;一条大街上住着n个乒乓球爱好者&#xff0c;经常组织比赛切磋技术。每个人都有一个不同的技能值ai。每场比赛需要三个人&#xff1a;两名选手&#xff0c;一名裁判。他们有一个奇怪的规定&#xff0c;即裁判必须住…

Frequent values【线段树】

Frequent values UVA - 11235 题目传送门 题目大意&#xff1a;给出一个非降序的整数数组a1,a2,a3...an&#xff0c;你的任务是对一系列的询问&#xff08;i,j&#xff09;&#xff0c;回答ai,ai1,ai2...aj中出现次数最多的值所出现的次数。输入包括多组数据。每组数据第一行…

求二叉树节点个数、叶子节点、节点层次与宽度

需实现&#xff1a;&#xff08;1&#xff09;输出二叉树b的节点个数 &#xff08;2&#xff09;输出二叉树b的叶子节点个数 &#xff08;3&#xff09;求二叉树b中指定节点值&#xff08;假设所有节点值不同&#xff09;的节点的层次。 &#xff08;4&#xff09;利用层次遍历…

UVA - 227 Puzzle

Puzzle UVA - 227 题目传送门 注意点&#xff1a;每两个输出点间有一个换行&#xff0c;但最后一个输出无换行 恶心模拟题&#xff0c;很卡输入输出&#xff01;&#xff01;&#xff01; AC代码1:(自己的代码&#xff0c;提交时需要选择C11) #include <cstdio> #i…

UVA - 232 ​​​​​​​Crossword Answers

Crossword Answers UVA - 232 题目传送门 直接按照要求寻找遍历一遍即可 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #include <m…

UVA - 1368 ​​​​​​​DNA Consensus String

DNA Consensus String UVA - 1368 题目传送门 解决方法&#xff1a;寻找每列中出现最多的字母。 AC代码 #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #inc…

UVA - 202 Repeating Decimals

Repeating Decimals UVA - 202 题目传送门 解决方法&#xff1a;模拟一下除法&#xff0c;及时记录余数&#xff0c;当一个余数第二次出现时证明开始循环 AC代码 #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #…

UVA - 10340 ​​​​​​​All in All

All in All UVA - 10340 题目传送门 将两个字符串对比一下即可。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #include <map> …

UVA - 1587 ​​​​​​​Box

Box UVA - 1587 题目传送门 解决方法&#xff1a;按照边在12个长宽出现的次数和出现在几个矩形里来判定就行了 总共出现一个长度&#xff0c;满足条件 总共出现两个长度&#xff0c;则其中一个长度在12个数里出现4次&#xff0c;并在四个矩形中出现 总共出现三个长度&#x…

UVA - 1588 ​​​​​​​Kickdown

Kickdown UVA - 1588 题目传送门 解决方法&#xff1a;上板不动&#xff0c;下板向左移&#xff1b;上板不动&#xff0c;下板向右移。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #inclu…

UVA - 1339 ​​​​​​​Ancient Cipher

Ancient Cipher UVA - 1339 题目传送门 解决方法&#xff1a;模拟一下转换过程即可。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #i…

UVA - 489 ​​​​​​​Hangman Judge

Hangman Judge UVA - 489 题目传送门 PS.此题Udebug有毒&#xff0c;即使100组样例全过&#xff0c;但还是WA&#xff0c;心塞。 这是我自己的代码&#xff0c;悲催的WA了 #include <cstdio> #include <iostream> #include <algorithm> #include <cm…

UVA - 133 ​​​​​​​The Dole Queue

The Dole Queue UVA - 133 题目传送门 模拟一遍过程&#xff0c;注&#xff1a;可能会选中同一个人 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <c…

UVA - 213 Message Decoding

Message Decoding UVA - 213 题目传送门 emmmm&#xff0c;此题按照紫书上的思路来即可&#xff0c;要么太复杂 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #in…

UVA - 512 ​​​​​​​Spreadsheet Tracking

Spreadsheet Tracking UVA - 512 题目传送门 紫书第二个思路十分巧妙&#xff0c;能用很少的代码解出此题。 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #inclu…

UVA - 1589 ​​​​​​​Xiangqi

Xiangqi UVA - 1589 题目传送门 解决方法&#xff1a;判断黑棋是否能有可以下的地方 AC代码&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #in…