這個題是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 則不是乙個回文串。阿福現在強迫症發作,看到什麼字串都想要把它變成回文的...