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.pswp.cn/news/536335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536335.shtml
英文地址,請注明出處:http://en.pswp.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…