poj 1159 (메모 dp)

1724 단어
Palindrome
Time Limit: 3000MS
 
Memory Limit: 65536K
Total Submissions: 49315
 
Accepted: 16937
Description
A palindrome is a symmetrical string, that is, a string read identically from left to right as well as from right to left. You are to write a program which, given a string, determines the minimal number of characters to be inserted into the string in order to obtain a palindrome. 
As an example, by inserting 2 characters, the string "Ab3bd"can be transformed into a palindrome ("dAb3bAd"or "Adb3bdA"). However, inserting fewer than 2 characters does not produce a palindrome. 
Input
Your program is to read from standard input. The first line contains one integer: the length of the input string N, 3 <= N <= 5000. The second line contains one string with length N. The string is formed from uppercase letters from 'A' to 'Z', lowercase letters from 'a' to 'z' and digits from '0' to '9'. Uppercase and lowercase letters are to be considered distinct.
Output
Your program is to write to standard output. The first line contains one integer, which is the desired minimal number.
Sample Input
5
Ab3bd

Sample Output
2

Source
IOI 2000
 
제목이 간단하다.
사실 회문열이 사용할 수 있는 유일한 성질은str[i]~str[j]가 회문열이면str[i+1]~str[j-1]도 회문열이다.
이 성질을 잘 하면 대다수의 회문열 문제를 해결할 수 있다.
 
Timeout을 한 번 공헌했는데, 오랫동안 보지 못했다.
 
레코드를 커밋하려면 다음과 같이 하십시오.
1. Timeout은 뇌 장애자가 순환을 많이 썼기 때문이다.표를 비스듬히 채울 때 i와interval이 확실할 때 j가 유일하게 확실합니다.
더 이상 j에 대한 순환을 하지 마세요!
2、Accepted.
 
코드는 다음과 같습니다.

좋은 웹페이지 즐겨찾기