程式設計之美挑戰賽 回文字元序列(區間dp)

2021-07-01 21:40:27 字數 1313 閱讀 2202

給定字串,求它的回文子串行個數。回文子串行反轉字元順序後仍然與原序列相同。例如字串aba中,回文子串行為"a", "a", "aa", "b", "aba",共5個。內容相同位置不同的子串行算不同的子串行。

第一行乙個整數t,表示資料組數。之後是t組資料,每組資料為一行字串。

對於每組資料輸出一行,格式為"case #x: y",x代表資料編號(從1開始),y為答案。答案對100007取模。

1 ≤ t ≤ 30

小資料字串長度 ≤ 25

大資料字串長度 ≤ 1000

樣例輸入

5

abaabcbaddabcba

12111112351121

ccccccc

fdadfa

樣例輸出

case #1: 5

case #2: 277

case #3: 1333

case #4: 127

case #5: 17

hint:5:

1.f 

2.d 

3.a 

4.f 

5.d 

6.a 

7.ff 

8.dd 

9.aa 

10.fdf 

11.faf 

12.fdf 

13.dad 

14.ada 

15.afa 

16.fddf 

17.fdadf

大神是用dp做的。。

用dp[i][j]表示這一段裡有多少個回文串,那首先dp[i

][j]=dp[i

+1][j

]+dp[i

][j-1

],但是dp[i+1][j]和dp[i][j-1]可能有公共部分,所以要減去dp[

i+1][

j-1]。

如果str[i]==str[j]的話,還要加上dp[i+1][j-1]+1。

以後保險起見還是所有減法的操作都+mod吧。。

#include #include #include #include #include #include#define mod 100007  

using namespace std;

int dp[1005][1005];

int main()

} printf("case #%d: %d\n",++cnt,dp[1][n]);

} return 0;

}

程式設計之美 回文字元序列

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定字串,求它的回文子串行個數。回文子串行反轉字元順序後仍然與原序列相同。例如字串aba中,回文子串行為 a a aa b aba 共5個。內容相同位置不同的子串行算不同的子串行。第一行乙個整數t,表示資料組數。之後是t組資料,...

2015程式設計之美 回文字元序列 區間Dp

給定字串,求它的回文子串行個數。回文子串行反轉字元順序後仍然與原序列相同。例如字串aba中,回文子串行為 a a aa b aba 共5個。內容相同位置不同的子串行算不同的子串行。第一行乙個整數t,表示資料組數。之後是t組資料,每組資料為一行字串。對於每組資料輸出一行,格式為 case x y x代...

2013程式設計之美挑戰賽 集會

description 在一條河的一側,分布著 n 個村莊。這些村莊平日裡需要一些 往來,然而商人們來回走遍每一座村莊是非常辛苦的,於是他們決定每個月都在河邊舉行一次集會,大家都來集會上購買需要的物品。然而在集會地點的選擇上,大家卻有分歧,因為誰都不願意集會的地點離自己村莊非常遠。經過一番激烈的討論...