BJUTACM 1031 切割回文

2021-08-21 19:45:26 字數 1018 閱讀 7158

這個題是dp的經典題目,主要思想及狀態轉移在於:乙個位置需要切割的刀數,等於從之前到他最長的回文序列,之前的那個元素切割的刀數+1,或者如果他與之前的無法構成回文序列,則等於之前那個位置所需要切割的刀數+1

dp太不熟練了......真的需要多練了...

題目鏈結

#include #include using namespace std;

int judgethereverse(char s,int start,int end)//這裡需要採用線性judge 找尋第[start,end]

//採用 計算機下標

count ++;

} return 1;

} else if(length%2!=0)//如果是奇數字abcdcba

// 0123456

count ++;

} return 1;

} }int main(void)

for(int i=0;ielse}}

} // for(int i=1;i<=lens;i++)

//

printf("%d\n",dp[lens]);

/*如果能從0位開始構成回文 則那個位置的切割數是0

如果不能 則從第1位開始找,有沒有能和這個位置構成回文的

如果有則找到這些回文中「長度最長的」預設這一段切割掉 此時這個位置的所需切割數

等於這個位置之前的切割數+1

如果在這些裡也沒有找到回文的 則這個位置的長度等於其前一位的切割長度+1

總結:乙個位置的切割長度

回文要麼存在於從第一位開始到某一位

要麼存在於 順序遍歷 往回的查詢即 2-1 3-1 -32 4-1 4-2 4-3 4-4中

乙個位置的切割回文數情況 等於其前邊的回文數情況+1 與 它所構成回文序列之前的 數字+1 之間的最小值

*/ }

}//dynamic programming

openjudge 切割回文

描述 阿福最近對回文串產生了非常濃厚的興趣。如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,abcaacba 是乙個回文串,abcaaba 則不是乙個回文串。阿福現在強迫症發作,看到什麼字串都想要把它變成回文的。阿福可以通過切割字串,使得切割完之後得到的子串都是回...

openjudge 切割回文

總時間限制 1000ms 記憶體限制 65536kb 描述 阿福最近對回文串產生了非常濃厚的興趣。如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,abcaacba 是乙個回文串,abcaaba 則不是乙個回文串。阿福現在強迫症發作,看到什麼字串都想要把它變成回文的...

OpenJudge P8471 切割回文

總時間限制 1000ms 記憶體限制 65536kb 描述 阿福最近對回文串產生了非常濃厚的興趣。如果乙個字串從左往右看和從右往左看完全相同的話,那麼就認為這個串是乙個回文串。例如,abcaacba 是乙個回文串,abcaaba 則不是乙個回文串。阿福現在強迫症發作,看到什麼字串都想要把它變成回文的...