点拨:
运用动态规划的思路
对于一给定的字符串,其未来和现在有什么关系?
假如其过去已知,其现在和过去有什么?
细节
当两端相等时,继承不一定比从中间合起来要小
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int a[505];
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
int sum[505][505]={0};
for(int i=1;i<=n;i++)sum[i][i]=1;
for(int i=1;i<=n-1;i++)sum[i][i+1]=a[i]==a[i+1]?1:2;
for(int i=2;i<=n;i++)
for(int j=1;j+i<=n;j++)
{
int ans=2e9;
for(int k=j;k<=j+i-1;k++) ans=min(sum[j][k]+sum[k+1][j+i],ans);
sum[j][j+i]=ans;
if(a[j]==a[j+i]) sum[j][j+i]=min(sum[j][j+i],sum[j+1][j+i-1]);
}
printf("%d\n",sum[1][n]);
return 0;
}
标签:原题,int,scanf,namespace,Zuma,include
From: https://www.cnblogs.com/pure4knowledge/p/17880357.html