【BZOJ】1260 [CQOI2007]涂色paint(区间dp)

题目

传送门:QWQ

分析

区间dp, 详见代码

代码

/**************************************************************
    Problem: 1260
    User: noble_
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1328 kb
****************************************************************/
 
#include <bits/stdc++.h>
using namespace std;
char s[100];
int dp[100][100];
int main()
{
    for(int i=0;i<100;i++) for(int j=0;j<100;j++) dp[i][j]=1<<25;
    scanf("%s",s+1);
    int n=strlen(s+1);
    for(int i=1;i<=n;i++) dp[i][i]=1;
     
    for(int l=2;l<=n;l++)
    for(int i=1;i+l-1<=n;i++)
    {
        int j=i+l-1;
        if(s[i]==s[j])
        {
            if(l==2) dp[i][j]=1;
            else
            {
                dp[i][j]=min(dp[i+1][j],dp[i][j-1]);
                dp[i][j]=min(dp[i][j],dp[i+1][j-1]+1);
            }
        }
        else for(int k=i;k<=j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
    }
    printf("%d",dp[1][n]);
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/noblex/p/8445125.html