CF 607B Zuma 經典區間DP

2022-06-27 18:21:09 字數 677 閱讀 2380

給出乙個長度為n的整數陣列,每次可以去掉乙個連續的回文子串行。

剩下的會靠攏,問最少幾次可以去完。

經典區間dp。

\(dp[i][j]\)表示把區間\([i,j]\)消除完的最小值

轉移方程:

if arr[i]==arr[j]: dp[i][j]=dp[i+1][j-1]

dp[i][j]=min(dp[i][k],dp[k+1][j])

#include#include#include#include#include#include#define pb push_back

typedef long long ll;

using namespace std;

const int inf = 0x3f3f3f3f;

const int mod = 1e9+7;

const int n = 500+10;

int n,arr[n],dp[n][n];

int main()

for(int k=j;kdp[j][en]=min(dp[j][en],dp[j][k]+dp[k+1][en]);}}

printf("%d\n",dp[1][n]);

return 0;}/*

*/