首页 > 其他 > 详细

Zuma CodeForces - 607B (区间DP)

时间:2019-07-16 22:19:10      阅读:93      评论:0      收藏:0      [点我收藏+]

大意: 给定字符串, 每次删除一个回文子串, 求最少多少次删完.

#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;


const int N = 510, INF = 0x3f3f3f3f;
int n,a[N],dp[N][N];

int main() {
	scanf("%d",&n);
	REP(i,1,n) scanf("%d",a+i);
	REP(d,1,n) {
		for (int l=1,r=d;r<=n;++l,++r) {
			if (d==1) dp[l][r]=1;
			else if (d==2) dp[l][r]=a[l]==a[r]?1:2;
			else { 
				dp[l][r]=INF;
				if (a[l]==a[r]) dp[l][r]=dp[l+1][r-1];
				REP(k,l,r-1) dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
			}
		}
	}
	printf("%d\n", dp[1][n]);
}

 

Zuma CodeForces - 607B (区间DP)

原文:https://www.cnblogs.com/uid001/p/11197853.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!