bzoj1032 [JSOI2007]祖码Zuma DP
来源:互联网 发布:adobeflashplayer mac 编辑:程序博客网 时间:2024/05/17 04:36
题意就不必说了,挺显然的。
也算是个比较简单的dp,但是因为没见过这种类型的所以有点措手不及= =。
首先把每个连续段的统计一下,每一段的答案是可以提前计算的,如果不是只有一个的话答案就是1,否则就是2.
那么枚举区间长度,然后枚举开头和结尾,则有:
特殊情况是r[i]=l[i]且r[j]=l[j],那么:
时间复杂度O(n^3).
#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int N=505;int n,m;int cnt,l[N],r[N],col[N];int f[N][N];int main(){ scanf("%d",&n); fo(i,1,n) { int x; scanf("%d",&x); if (i==1||x!=col[cnt]) { col[++cnt]=x; l[cnt]=i; r[cnt-1]=i-1; } } r[cnt]=n; memset(f,0x3f,sizeof(f)); fo(i,1,n) if (r[i]==l[i])f[i][i]=2; else f[i][i]=1; fo(len,2,cnt) { fo(i,1,cnt-len+1) { int j=i+len-1; fo(k,i,j-1) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); if (col[i]==col[j]) { if (r[i]==l[i]&&r[j]==l[j]) f[i][j]=min(f[i][j],f[i+1][j-1]+1); else f[i][j]=min(f[i][j],f[i+1][j-1]); } } } printf("%d\n",f[1][cnt]);}
阅读全文
0 0
- bzoj1032 [JSOI2007]祖码Zuma DP
- bzoj1032: [JSOI2007]祖码Zuma
- bzoj1032: [JSOI2007]祖码Zuma
- bzoj1032: [JSOI2007]祖码Zuma
- 区间DP(记搜)——BZOJ1032/Luogu2145 [JSOI2007]祖码Zuma
- BZOJ 1032: [JSOI2007]祖码Zuma 区间DP
- JSOI2007 祖码Zuma
- bzoj 1032: [JSOI2007]祖码Zuma(区间DP)
- [JSOI2007]祖码Zuma/[bzoj]1032
- BZOJ 1032 [JSOI2007]祖码Zuma
- BZOJ 1032 [JSOI2007] 祖码Zuma
- BZOJ 1032 JSOI2007 祖码Zuma 动态规划
- [JSOI2007]祖码Zuma(洛谷2145)
- Codeforces_607B:Zuma(区间DP)
- BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
- SPOJ-ZUMA(区间DP)
- Codeforces 607B:Zuma DP
- CF607B: Zuma(区间dp)
- 嵌入式Linux入门10:编译管理Makefile
- 软件测试学习2-软件开发生命周期模式
- 【opencv】Face Detection using Haar Cascades
- 美美的迎接马代的太阳!
- C语言基础
- bzoj1032 [JSOI2007]祖码Zuma DP
- 探究Java中Set和List转换时,元素的存储方式
- Java集合的Stack、Queue、Map的遍历
- 常见异常类型
- NAT工作原理
- 自定义控件的三个构造方法含义
- Linux 用户管理命令
- 分析程序的输出
- linux文件目录结构以及常用命令