BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
来源:互联网 发布:淘宝的igtt是真的吗 编辑:程序博客网 时间:2024/05/18 01:02
题目大意:按照祖玛的玩法(随意选颜色),给出一段区间,问最少用多少个球能够把所有颜色块都消除。
思路:把输入数据按照连续的块处理,保存成颜色和数量,然后用这个来DP。我们知道,一个单独的块需要两个相同的颜色可以消去,对于这样的块f[i][i] = 2,其余的>=2个的块只需要一个,这样的块f[i][i] = 1。转移就比较简单了,按照区间DP的一般思想,最外层循环的是区间长度,中间循环的是起始位置,最后循环的是松弛变量。特殊情况是这个区间的两边是同一种颜色,多加一个转移方程。
CODE:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAX 510using namespace std;pair<int,int> arr[MAX];int cnt,src[MAX],total;int f[MAX][MAX];int main(){cin >> cnt;for(int i = 1; i <= cnt; ++i)scanf("%d",&src[i]);int last = src[1],num = 0;for(int i = 1; i <= cnt; ++i) {if(src[i] != last) {arr[++total] = make_pair(last,num);last = src[i];num = 1;}else++num;}arr[++total] = make_pair(last,num);memset(f,0x3f,sizeof(f));for(int i = 1; i <= total; ++i)if(arr[i].second == 1)f[i][i] = 2;elsef[i][i] = 1;for(int k = 2; k <= total; ++k)for(int i = 1; i + k - 1 <= total; ++i){if(arr[i].first == arr[i + k - 1].first)f[i][i + k - 1] = f[i + 1][i + k - 2] + (arr[i].second + arr[i + k - 1].second == 2 ? 1:0);for(int j = 1; j < k; ++j)f[i][i + k - 1] = min(f[i][i + k - 1],f[i][i + j - 1] + f[i + j][i + k - 1]);}cout << f[1][total] << endl;return 0;}
0 1
- BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
- BZOJ 1032: [JSOI2007]祖码Zuma 区间DP
- bzoj 1032: [JSOI2007]祖码Zuma(区间DP)
- Codeforces_607B:Zuma(区间DP)
- [JSOI2007]祖码Zuma/[bzoj]1032
- BZOJ 1032 [JSOI2007]祖码Zuma
- BZOJ 1032 [JSOI2007] 祖码Zuma
- SPOJ-ZUMA(区间DP)
- CF607B: Zuma(区间dp)
- Hdu-6212 Zuma(区间DP)
- Hdu 6212 Zuma 区间DP
- HDU6212 Zuma(区间dp)
- [DP] BZOJ 1939 [Croatian2010] Zuma
- BZOJ 1030 JSOI 2007 文本生成器 AC自动机+DP
- BZOJ 1032 JSOI2007 祖码Zuma 动态规划
- SPOJ 6340 ZUMA(区间DP)
- Codeforces 607B - Zuma (区间DP)
- Codeforces 607B Zuma 【区间dp】
- 最大连续和的方法总结
- Climbing Stairs (leetcode)
- post和get的区别?
- 数据库性能调优之后,进一步的验证和分析
- 3分钟,9个Q&A让你快速知道Docker到底是什么
- BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
- 车牌识别系统Matlab算法实现
- java中calendar方法实现日期格式化
- 为exe添加图标,更改exe图标--python
- Android工具类,持续更新中
- 【Boost】boost::noncopyable介绍 .
- 贪心算法
- 跨界干货:如何在一周内摸清一个行业
- DIY音乐频谱