题解:P5189 [COCI 2009/2010 #5] ZUMA
chase_the_light · · 题解
十分有思维难度的一道区间动规题目。
一开始想到可以设计一个二维的状态,令
通过惊人的注意力,我决定加入一个状态,令
枚举区间长度与
#include<bits/stdc++.h>
using namespace std;
const int N=105;
using ll=long long;
int dp[N][N][N],c[N],n,m;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>c[i];
for(int l=1;l<=n;l++){
for(int i=1;i<=n-l+1;i++){
int j=i+l-1;
for(int x=0;x<m;x++){
dp[i][j][x]=dp[i][j-1][0]+m-x-1;
for(int k=i;k<j;k++){
if(c[k]==c[j]) dp[i][j][x]=min(dp[i][j][x],dp[i][k][min(x+1,m-1)]+dp[k+1][j-1][0]);
}
}
}
}
cout<<dp[1][n][0];
return 0;
}