codeforces #336 D. Zuma (区间dp)
来源:互联网 发布:网络电视会员怎么开通 编辑:程序博客网 时间:2024/05/17 03:20
题目:http://codeforces.com/contest/608/problem/D
题意:给定长度为n(n<=500)的序列s,你每次可以消除一个连续回文子序列,问最少多少次可以把串消完。
分析:
定义dp[L][R]代表区间[L,R]的最少消除次数。
1.当L==R时:dp[L][R]=1;
2.当L<R时,
--2.a) 当s[L]单独删掉,dp[L][R]=1+dp[L+1][R];
--2.b) 当s[L]作为回文串的一部分删掉时,那么s[L]==s[i],dp[L][R]=dp[L+1][i-1]+dp[i+1][R]。
3.当L>R时,dp[L][R]=1。此时区间的两个端点越过中点。
代码:
#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;const LL INF = 1E9+9;const int MI = ~0u>>1;const int maxn = 555;int dp[maxn][maxn],n,a[maxn];int dfs(int L,int R){if(L>R)return 1;else if(L==R)return 1;else{if(dp[L][R]!=INF)return dp[L][R];else{dp[L][R]=1+dfs(L+1,R);for(int i=L+1;i<=R;i++){if(a[L]==a[i]){if(i!=R)dp[L][R]=min(dp[L][R],dfs(L+1,i-1)+dfs(i+1,R));elsedp[L][R]=min(dp[L][R],dfs(L+1,i-1));}}}}return dp[L][R];}int main(){scanf("%d",&n);for(int i=0;i<maxn;i++)for(int j=0;j<maxn;j++)dp[i][j]=INF;for(int i=1;i<=n;i++)scanf("%d",&a[i]);printf("%d\n",dfs(1,n));return 0;}
0 0
- codeforces #336 D. Zuma (区间dp)
- Codeforces Round #336 (Div. 2) D. Zuma(区间dp)
- Codeforces Round #336 (Div. 2)D. Zuma【区间dp】
- Codeforces Round #336 (Div. 2)-D Zuma(区间DP)
- Codeforces Round #336 (Div. 1)-B. Zuma(区间dp)
- codeforces 607B #336B Zuma [区间DP]【动态规划】
- Codeforces Round #336 (Div. 1)B. Zuma (区间DP)
- Codeforces 607B - Zuma (区间DP)
- Codeforces 607B Zuma 【区间dp】
- codeforces 607B Zuma 区间dp
- CodeForces 607 B. Zuma(区间DP)
- codeforces 607 B Zuma(区间dp)
- Codeforces 607B Zuma (区间dp)
- [Codeforces 607B Zuma]区间DP
- [区间DP] Zuma CodeForces 607B
- CodeForces 607B:Zuma(区间DP)
- Codeforces Round #336 (Div. 2) 608D Zuma(dfs+dp)
- CodeForces 608D Zuma(DP)
- HDU 2838 Cow Sorting(树状数组)
- Linux kamailio Sip服务器的编译与安装(Ubuntu14.04)
- 基于在线多示例学习的稳定目标跟踪方法
- IP地址和子网掩码的作用是什么
- OpenJudge百炼习题解答(C++)--题3858:和数
- codeforces #336 D. Zuma (区间dp)
- 程序员面试题精选100题(18)-用两个栈实现队列[数据结构]
- Find The Multiple
- C/C++ 图像处理(9)------图像の桶形畸变矫正
- 程序员面试题精选100题(19)-反转链表[数据结构]
- 《超级优化Linux远程SSH连接》
- Java c++通过des加解密
- 欢迎使用CSDN-markdown编辑器
- 这是我的第一篇博客