CodeForces 607 B. Zuma(区间DP)
来源:互联网 发布:linux 设置语言为英文 编辑:程序博客网 时间:2024/05/20 09:27
Description
给出一个长度为n的串,每秒可以消去一个回文串,问最少需要多少秒才能消掉全部的串
Input
第一行为一整数n,之后为一长度为n的数字串c(1<=n<=500,1<=ci<=n)
Output
输出消去串c最少需要几秒
Sample Input
7
1 4 4 2 3 2 1
Sample Output
2
Solution
区间DP,令dp[l][r]为消掉区间[l,r]的次数,那么dp[l][r]=min(dp[l][r],dp[l][i]+dp[i+1][r])(l<=i<=r-1),当c[l]=c[r]时,在上面的基础上dp[l][r]=min(dp[l][r],dp[l+1][r-1]),具体操作可以用记忆化搜索来实现,已经求出的答案需要记录避免重复计算
Code
#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define maxn 555int n,c[maxn],dp[maxn][maxn];int dfs(int l,int r){ if(dp[l][r])return dp[l][r]; if(l>=r)return dp[l][r]=1; int ans=r-l+1; for(int i=l;i<r;i++) ans=min(ans,dfs(l,i)+dfs(i+1,r)); if(c[l]==c[r])ans=min(ans,dfs(l+1,r-1)); return dp[l][r]=ans;}int main(){ while(~scanf("%d",&n)) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++)scanf("%d",&c[i]); printf("%d\n",dfs(1,n)); } return 0;}
0 0
- CodeForces 607 B. Zuma(区间DP)
- CodeForces 607B:Zuma(区间DP)
- Codeforces 607B - Zuma (区间DP)
- Codeforces 607B Zuma 【区间dp】
- codeforces 607B Zuma 区间dp
- codeforces 607 B Zuma(区间dp)
- Codeforces 607B Zuma (区间dp)
- [Codeforces 607B Zuma]区间DP
- [区间DP] Zuma CodeForces 607B
- codeforces 607B #336B Zuma [区间DP]【动态规划】
- Codeforces Round #336 (Div. 1)B. Zuma (区间DP)
- Codeforces 607B:Zuma DP
- Codeforces Round #336 (Div. 1)-B. Zuma(区间dp)
- codeforces 607B. Zuma
- CodeForces-607B Zuma
- Codeforces Round #336 (Div. 2) D. Zuma(区间dp)
- Codeforces Round #336 (Div. 2)-D Zuma(区间DP)
- codeforces #336 D. Zuma (区间dp)
- 应用程序无法正常启动(oxc000007b):解决方案
- Learn Some Framework-4 Binder And ServerManager
- 笔记:We don’t need no bounding-boxes: Training object class detectors using only human verification
- 算法代码实现之三向切分快速排序,C/C++实现
- Activity介绍
- CodeForces 607 B. Zuma(区间DP)
- 最新版IntelliJ IDEA 15开发Java Maven项目
- web前端开发
- java中的几个循环的注意点
- 常用Linux命令
- Android 第二天重置版 技巧
- SSH进阶——Struts入门
- 深入理解Java的接口和抽象类
- Redis集群管理之Redis Cluster集群节点增减