• Educational Codeforces Round 61 (Rated for Div. 2)F(区间DP,思维,枚举)


    #include<bits/stdc++.h>
    typedef long long ll;
    const int inf=0x3f3f3f3f;
    using namespace std;
    char b[507];
    int dp[507][507];
    int main(){
        memset(dp,0x3f,sizeof(dp));
        int n;
        scanf("%d",&n);
        scanf("%s",b+1);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(i==j)
                    dp[i][j]=1;
                else
                    dp[i][j]=inf;
        for(int len=1;len<=n;len++)//中间段长度
            for(int l=1,r;(r=l+len)<=n;l++)//枚举起点,枚举终点
                if(b[l]==b[r])
                    if(len==1)
                        dp[l][r]=1;//初始为1
                    else
                        dp[l][r]=min(min(dp[l+1][r],dp[l][r-1]),dp[l+1][r-1]+1);//更新最小值
                else
                    for(int k=l;k<r;k++)
                        dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);//区间更新
        printf("%d",dp[1][n]);
    }

    //类似cf#538D

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    转:浅谈Linux的内存管理机制
    (转)Redis
    检测socket链接是否断开
    linux C 中的volatile使用
    LINUX 下 ipv6 socket 编程
    linux signal 列表
    Linux下异常信号
    linux signal
    转: 关于Linux常用的二进制文件分析方法
    IOI2020 题解
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10486816.html
Copyright © 2020-2023  润新知