HDU6212 Zuma(区间dp)
来源:互联网 发布:制作软件程序 编辑:程序博客网 时间:2024/06/05 18:50
Zuma
传送门1
传送门2
Think about the Zuma Game. You have a row of at most
Find the minimal balls you have to insert to remove all the balls on the table.
Input
The first line of input contains an integer
Each test case contains a line with a non-empty string of 0 and 1 describing the row of balls at the start.
Output
For each test case, output the case number and the minimal balls required to insert in a line.
Sample Input
4
10101
101001001
1001001001
01001101011001100
Sample Output
Case #1: 4
Case #2: 3
Case #3: 3
Case #4: 2
题意
一共有两种颜色的祖玛游戏,每三个连在一起(或者大于三个)的球球就会被消除掉,问将这个字符串消除干净的最小吐球个数。
分析
定义
那么显然,玩过祖玛的童鞋们都知道有三种消除一个区间方式(当然你没玩过也肯定想的出来 ):实际上也可以认为是两种
1.将区间分成两部分,各消除自身的部分:
2.将中间区间全部消除掉之后,两端的相同颜色相撞删除:
3.中间有1个球球,然后消除掉其左右两侧的部分之后,3部分相撞消除:
参考
CODE
#include<cstdio>#include<cstring>#define FOR(i,a,b) for(int i=(a),i##_END_=(b);i<=i##_END_;i++)#define N 205char s[N];int cnt[N],dp[N][N];inline void Min(int &x,int y) {if(x>y)x=y;}int main() { int t; int cas=0; scanf("%d",&t); while(t--) { scanf("%s",s); int n=strlen(s),m=1; cnt[1]=1; FOR(i,1,n-1) { if(s[i]==s[i-1])cnt[m]=2; else cnt[++m]=1; } FOR(len,0,m)FOR(i,1,m) { int j=i+len; if(j<=m&&j>=1) { if(len==0)dp[i][j]=3-cnt[i]; else { dp[i][j]=n<<1; FOR(k,i,j-1)Min(dp[i][j],dp[i][k]+dp[k+1][j]);//左边消左边的右边消右边的 if(!(len&1)) { if(cnt[i]+cnt[j]==2)Min(dp[i][j],dp[i+1][j-1]+1);//左右相撞 else Min(dp[i][j],dp[i+1][j-1]); if(cnt[i]+cnt[j]<=3)//左中右相撞 for(int k=i+2; k<j; k+=2) if(cnt[k]==1) Min(dp[i][j],dp[i+1][k-1]+dp[k+1][j-1]); } } } } printf("Case #%d: %d\n",++cas,dp[1][m]); } return 0;}
- HDU6212 Zuma(区间dp)
- 【区间dp】HDU6212 Zuma 经典题
- hdu6212 区间dp
- SPOJ-ZUMA(区间DP)
- CF607B: Zuma(区间dp)
- SPOJ 6340 ZUMA(区间DP)
- CodeForces 607 B. Zuma(区间DP)
- CodeForces 607B:Zuma(区间DP)
- Codeforces_607B:Zuma(区间DP)
- Hdu-6212 Zuma(区间DP)
- Hdu 6212 Zuma 区间DP
- Codeforces Round #336 (Div. 2) D. Zuma(区间dp)
- Codeforces Round #336 (Div. 1)B. Zuma (区间DP)
- bzoj 1032: [JSOI2007]祖码Zuma(区间DP)
- Codeforces Round #336 (Div. 2)-D Zuma(区间DP)
- hdu2017青岛网络赛Zuma(区间dp)
- Codeforces 607B - Zuma (区间DP)
- Codeforces 607B Zuma 【区间dp】
- 【UnityShader】屏幕空间全息扫描效果
- 网易2018校园招聘编程题
- Java的外部类为什么不能使用private、protected进行修饰
- JDBC
- Java 分布式服务架构
- HDU6212 Zuma(区间dp)
- 因子和(数论,算数基本定理,快速幂,逆元)
- Vmware本地yum源配置
- Floodlight学习笔记(1)
- 剑24-判断是否为二叉树后序遍历序列
- 深入探究C++中虚函数和虚析构函数的实现原理
- iOS的FTP文件上传
- 爱学府软件园告诉你PowerDVD 17有多厉害 高清视频播放器一哥名不虚传(powerdvd 17破解版)
- Unity脚本组件勾选框的存在的意义