BZOJ1260: [CQOI2007]涂色paint【记忆化DP】

类似记忆化dp、、

f[i][j]表示i~j这一段最少要涂几次。每次递归计算、头尾如果相同可以最先涂、所以可以减1、然后合并上来就行、、

最近写的代码怎么都这么短?还是我太弱了只会刷水?唉、、囧、、、

#include<cstdio>
#include<algorithm>
#include<cstring>
const int inf=1000000009;
int F[60][60]={0},l;    char s[60];
int f(int l,int r){
    if(l==r)    return 1;   if(F[l][r]) return F[l][r]; F[l][r]=inf;
    for(int i=l;i<=r;i++)   F[l][r]=std::min(f(l,r),f(l,i)+f(i+1,r));
    return F[l][r]-=(s[l]==s[r]);
}int main(){
    scanf("%s",s);  l=strlen(s);    printf("%d\n",f(0,l-1));   return 0;
}