码迷,mamicode.com
首页 > 其他好文 > 详细

[CF607B] Zuma - 区间dp

时间:2020-02-08 10:10:04      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:一个   i+1   min   ems   序列   names   pre   ace   clu   

从一个序列中每次取出一个回文串,求最少取几次(取出后两端外的数会相接)

\(f[i][j]\) 为在闭区间 \([i,j]\) 取完所有的花费,则有 \(f[i][i]=1, f[i][i+1]=1+[a[i] \neq a[i+1]]\)

转移方程

\(f[i][j] = f[i+1][j-1], a[i]=a[j]\)

\(f[i][j] = min_{k=i}^{j-1} (f[i][k]+f[k+1][j])\)

#include <bits/stdc++.h>
using namespace std;

int f[505][505],a[505],n;

int main() {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    memset(f,0x3f,sizeof f);
    for(int i=1;i<=n;i++) f[i][i]=1;
    for(int i=1;i<n;i++) f[i][i+1]=1+(a[i]!=a[i+1]);
    for(int l=2;l<n;l++) {
        for(int i=1;i+l<=n;i++) {
            int j=i+l;
            if(a[i]==a[j]) f[i][j]=f[i+1][j-1];
            for(int k=i;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
        }
    }
    cout<<f[1][n];
}

[CF607B] Zuma - 区间dp

标签:一个   i+1   min   ems   序列   names   pre   ace   clu   

原文地址:https://www.cnblogs.com/mollnn/p/12275470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!