HDU 6212 Zuma
Zuma
这个题没有素质!它卡常!
我发现网上很多人的题解都写得很奇怪,也不好确定正确性,所以我借这篇题解表达一下愚见
定义$ dp[i][j][0...4]$表示
0:消完了
1:还剩1个0
2:还剩2个0
3:还剩1个1
4:还剩2个1
转移极其繁琐
卡常技巧:相邻相同的可以压成一个块
const int N=410;
#define chk(a,b) (a>b&&(a=b)) //卡常
int n,m;
char s[N];
int a[N],b[N],c[N],dp[N][N][5];
//0 --> 0
//1 --> one 0
//2 --> two 0
//3 --> one 1
//4 --> two 1
int main(){
int T; scanf("%d",&T);
rep(kase,1,T){
scanf("%s",s+1);
n=strlen(s+1);
rep(i,1,n) a[i]=s[i]^'0';
int _n=0;
rep(i,1,n) if(i==1||a[i]!=a[i-1]) {
_n++;
b[_n]=1; c[_n]=a[i];
} else b[_n]++,b[_n]=b[_n];//块合并
n=_n;
rep(i,1,n) rep(j,1,n) rep(o,0,4) dp[i][j][o]=1e9;
rep(i,1,n) {
dp[i][i][c[i]*2+b[i]]=0;
dp[i][i][0]=3-b[i];
}//边界条件初始化
drep(i,n,1) rep(j,i+1,n) {
rep(k,i,j-1){
reg int *x=dp[i][k],*y=dp[k+1][j];//指针卡常
chk(dp[i][j][0],x[0]+y[0]);
chk(dp[i][j][0],x[1]+y[2]);
chk(dp[i][j][0],x[2]+y[2]);
chk(dp[i][j][0],x[2]+y[1]);
chk(dp[i][j][0],x[3]+y[4]);
chk(dp[i][j][0],x[4]+y[3]);
chk(dp[i][j][0],x[4]+y[4]);
chk(dp[i][j][1],x[0]+y[1]);
chk(dp[i][j][1],x[1]+y[0]);
chk(dp[i][j][2],x[1]+y[1]);
chk(dp[i][j][2],x[0]+y[2]);
chk(dp[i][j][2],x[2]+y[0]);
chk(dp[i][j][3],x[0]+y[3]);
chk(dp[i][j][3],x[3]+y[0]);
chk(dp[i][j][4],x[3]+y[3]);
chk(dp[i][j][4],x[0]+y[4]);
chk(dp[i][j][4],x[4]+y[0]);
}
chk(dp[i][j][0],dp[i][j][1]+2);
chk(dp[i][j][0],dp[i][j][2]+1);
chk(dp[i][j][0],dp[i][j][3]+2);
chk(dp[i][j][0],dp[i][j][4]+1);
}
printf("Case #%d: %d\n",kase,dp[1][n][0]);
}
}
(题解写到一半突然dalao来质问我,发现这种做法好像是错的。。。,但还不清楚是不是)
如果发现有错误请写评论
HDU 6212 Zuma的更多相关文章
- HDU 6212 Zuma(区间dp)
http://acm.hdu.edu.cn/showproblem.php?pid=6212 题意:有一行的祖玛,只由1和0组成,每次出现连续三个及以上的就会消去,问你最少需要发射多少个球才能消完. ...
- HDU 6212 Zuma 2017青岛网络赛 区间DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6212 解法:看了眼题就发现这个BZOJ 1032不是一毛一样?但是BZOJ上那是个巨坑,数据有错,原来 ...
- HDU 6041.I Curse Myself 无向仙人掌图
I Curse Myself Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- HDU 6161.Big binary tree 二叉树
Big binary tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU 6214.Smallest Minimum Cut 最少边数最小割
Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Oth ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- windows7下安装msys2
系统: windows 7 首先需要msys2的安装包,可以去官网下载安装包官网地址: http://www.msys2.org/本次下载的是 msys2-x86_64-20190524.exe 注意 ...
- [转]js获取iframe通过url传递的参数
1.前言 获取iframe的url路径:window.parent.document.getElementById("your-iframe-id").contentWindow. ...
- if控制器,如何传参。
- vue 实现滚动到页面底部开始加载更多
直接上代码: <template> <div class="newsList"> <div v-for="(items, index) in ...
- 36、v-charts一些基本配置修改
例如柱状图: <ve-histogram :settings="chartSettings" :extend="chartExtend" :grid=&q ...
- rabbitmq:配置rabbitmq-management插件
rabbitmq提供了一个图形的管理界面,用于管理.监控rabbitmq的运行情况,它是以插件的形式提供的,如果要启用需要启用插件 一.启用插件 rabbitmq-plugins enable rab ...
- Nexus6p手机root和安装xposed
进行root前需要两个前提条件 解锁OEM 进入开发者选项:设置-〉关于-〉一直点版本号会出现,usb调试打开 手机连接pc命令行输入: adb reboot bootloader 进入bootloa ...
- 数据结构与算法—simhash
引入 随着信息爆炸时代的来临,互联网上充斥着着大量的近重复信息,有效地识别它们是一个很有意义的课题. 例如,对于搜索引擎的爬虫系统来说,收录重复的网页是毫无意义的,只会造成存储和计算资源的浪费: 同时 ...
- main process exited, code=exited, status=203/EXEC
问题描述: Oct :: c_3. systemd[]: Started etcd. Oct :: c_3. systemd[]: Starting etcd... Oct :: c_3. syste ...
- Web服务基础介绍
Web服务基础介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正常情况下的单次web服务访问流程 博主推荐阅读: https://www.cnblogs.com/yinzh ...