题目链接 BZOJ
洛谷

AC代码:

区间DP,f[i][j]表示消掉i~j需要的最少珠子数。
先把相邻的相同颜色的珠子合并起来。
枚举方法一样,处理一下端点可以碰撞消除的情况就行。
当然合并会出现问题,比如有多个同色珠子但是可以分配给两边分别匹配,比如:https://www.luogu.org/discuss/show/8416?page=1。
没办法 写不对。
注意颜色还可能是非正数。

//1820kb    108ms
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
const int N=505;int n,f[N][N];
struct Pair
{int col,cnt;Pair() {}Pair(int c,int t):col(c),cnt(t) {}
}A[N];inline int read()
{int now=0,f=1;register char c=gc();for(;!isdigit(c);c=gc()) if(c=='-') f=-1;for(;isdigit(c);now=now*10+c-'0',c=gc());return now*f;
}int main()
{n=read();for(int i=1; i<=n; ++i) A[i].col=read();
//  if(n==17&&A[1].col==0) {putchar('2'); return 0;}//洛谷某sxbk的数据。int cnt=1; A[1].cnt=1;for(int i=2; i<=n; ++i)if(A[i].col!=A[i-1].col) A[++cnt]=Pair(A[i].col,1);else ++A[cnt].cnt;n=cnt;memset(f,0x3f,sizeof f);for(int i=1; i<=n; ++i) f[i][i]=A[i].cnt>=2?1:2;for(int len=1; len<n; ++len)for(int i=1; i+len<=n; ++i){int j=i+len;if(A[i].col==A[j].col)//消除后再碰撞消除 //长度怎么会是1,都合并了 f[i][j]=f[i+1][j-1]+(A[i].cnt+A[j].cnt>=3?0:1);for(int k=i; k<j; ++k)f[i][j]=std::min(f[i][j],f[i][k]+f[k+1][j]);}printf("%d",f[1][n]);return 0;
}/*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
0 1 0 0 1 1 0 1 0 1  1  0  0  1  1  0  0
*/

不合并(瞎DP)代码(WA):

不合并同色的话,我只能过7个点了,但是某些数据能过。。比如:12 1 1 2 2 3 3 2 2 2 4 4 2 = 3.

#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
const int N=505;int n,col[N],f[N][N];inline int read()
{int now=0,f=1;register char c=gc();for(;!isdigit(c);c=gc()) if(c=='-') f=-1;for(;isdigit(c);now=now*10+c-'0',c=gc());return now*f;
}int main()
{n=read();for(int i=1; i<=n; ++i) col[i]=read();memset(f,0x3f,sizeof f);for(int i=1; i<=n; ++i) f[i][i]=2;for(int i=2; i<=n; ++i)//处理i>j的f[i][j],方便下面特判时len=2的情况。for(int j=1; j<i; ++j) f[i][j]=1;for(int len=1; len<n; ++len)for(int i=1; i+len<=n; ++i){int j=i+len;if(col[i]==col[j])//消除后再碰撞消除 {if(len==1) f[i][j]=1;else if(col[i]==col[i+1] && col[j-1]==col[j]) f[i][j]=f[i+2][j-2];else if(col[i]==col[i+1]) f[i][j]=f[i+2][j-1];else if(col[j-1]==col[j]) f[i][j]=f[i+1][j-2];else f[i][j]=f[i+1][j-1]+1;}for(int k=i; k<j; ++k)f[i][j]=std::min(f[i][j],f[i][k]+f[k+1][j]);
//          printf("(%d,%d):%d\n",i,j,f[i][j]);}printf("%d",f[1][n]);return 0;
}/*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
0 1 0 0 1 1 0 1 0 1  1  0  0  1  1  0  0
*/

转载于:https://www.cnblogs.com/SovietPower/p/9011339.html

BZOJ.1032.[JSOI2007]祖码(区间DP)相关推荐

  1. bzoj 1032: [JSOI2007]祖码Zuma(区间DP)

    1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1094  Solved: 569 [Submit][S ...

  2. BZOJ 1090: [SCOI2003]字符串折叠 区间DP

    1090: [SCOI2003]字符串折叠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  3. BZOJ 1032 JSOI 2007 祖码Zuma 区间DP

    题目大意:依照祖玛的玩法(任意选颜色),给出一段区间.问最少用多少个球可以把全部颜色块都消除. 思路:把输入数据依照连续的块处理.保存成颜色和数量.然后用这个来DP.我们知道,一个单独的块须要两个同样 ...

  4. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  5. 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压

    考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...

  6. bzoj 1003物流运输 区间dp+spfa

    基本思路: 一开始确实没什么思路,因为觉得怎么着都会超时,然后看一下数据范围,呵,怎么都不会超时. 思路: 1.看到能改变线路,想到可以用以下区间dp,区间dp的话,先枚举长度,枚举开始位置,然后枚举 ...

  7. bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】

    只要发现添加一个字符和删除一个字符是等价的,就是挺裸的区间dp了 因为在当前位置加上一个字符x就相当于在他的对称位置删掉字符x,所以只要考虑删除即可,删除费用是添加和删除取min 设f[i][j]为从 ...

  8. bzoj 1260: [CQOI2007]涂色paint(区间DP)

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 1681  Solved: 1018 [Submit][ ...

  9. BZOJ 4380 Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special Judge Submit: 162  Solved ...

最新文章

  1. C#学习笔记8:HTML和CSS基础学习笔记
  2. apue学习之文件IO第二部分
  3. matlab常见用法汇总,包括绘制二维、三维曲线、圆、读取、保存图片/数据、数值精度、绘制圆、绘制角度等
  4. linux centos7 替换yum源
  5. Chrome现在也能编辑pdf文件了!64位安卓版上线
  6. [SoapUI] How to create a random UUID in each Request's Headers
  7. 天池 在线编程 捡胡萝卜(模拟)
  8. 如何通过图片识别用的什么字体?
  9. sublime text3 常用配置
  10. React Hook 写 Timer时钟
  11. python基础项目 --爬取金山词霸翻译功能
  12. BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】...
  13. 程序猿杂记——七年之痒
  14. WORD2010 页眉横线和页面顶端距离相同显示不一样
  15. 前端学习------眼球跟踪效果
  16. 【目标检测】YOLO系列——YOLOv1详解
  17. 旋转编码器(STM32)
  18. 【2018.10.4】CXM笔记(图论)
  19. 八年Android开发,看我如何简化Android的UI开发!
  20. 截至4月印度可再生能源装机超57GW 光伏装机12.5GW

热门文章

  1. 教育部最新通知,中高考又有大变化,学生欲哭无泪,家长炸锅了
  2. Linux vi/vim 操作命令大全
  3. Android Handler消息传递机制
  4. linux一键重装系统脚本,一键重装CentOS纯净版系统shell脚本
  5. oracle 根据分隔符提取,oracle根据分隔符获取字符串
  6. mysql 全值匹配什么意思
  7. 004_Bean标签
  8. ue4 无限地图_RPG游戏开发日志13:无限地图的实现
  9. php PDO 浮点数返回,php – 如何在PDO中简单地返回对象?
  10. no.7_qzhai 开心版_传世霸业超变版下载-传世霸业超变版手机版下载v1.0