Codeforces Round #336 (Div. 2) D. Zuma

  • 题意:输入一个字符串;每次消去一个回文串,问最少消去的次数为多少?
  • 思路:一般对于可以从中间操作的,一般看成是从头开始(因为只需要考虑一边),当考虑最左边的数时,有多少中消去方法?每种消去方法对结果的贡献又是多少?同时结果的区间又是怎么变化?这就是dp式子;

1.当单独消去这个元素时,dp[l][r] = 1 + dp[l+1][r];

2.当存在一个k,l< k <= r,使得c[l] == c[k]时,可以认为在中间消除到只剩下一个回文串时,“顺带”把这一对元素消除;因为只少消到只剩下一个元素,那这个元素也是一个回文串,这时dp式子就是 dp[l][r] = dp[l+1][k-1] + dp[k+1][r];

那么当这里面的元素本来就为0呢?这就是我前面k的取值范围没有包括l的原因,这就是把[l , l + 1]当成回文串来消去,dp[l][r] = 1+dp[l+2][r];

// 必须说一下,我的dp思想真是弱爆了,还是看了文字题解才知道。。。

下面是我自己的代码:

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0;i < (n);i++)
#define MAXN 510
int c[MAXN];
int dp[MAXN][MAXN];
int main()
{
int i,j,k,n;
cin>>n;
rep(i,n) scanf("%d",c+i);
for(i = 0;i < n;i++){ //i表示区间长度;
for(j = 0;j < n - i;j++){
dp[j][j+i] = min(i + 1,1+dp[j+1][j+i]);
if(c[j] == c[j+1])
dp[j][j+i] = min(dp[j][j+i],1+dp[j+2][j+i]);
for(k = j + 2;k <= j + i;k++)if(c[j] == c[k])
dp[j][j+i] = min(dp[j][j+i],dp[j+1][k-1] + dp[k+1][j+i]);
}
}
printf("%d",dp[0][n-1]);
}

Codeforces Round #336 (Div. 2) D. Zuma的更多相关文章

  1. Codeforces Round #336 (Div. 2) D. Zuma 记忆化搜索

    D. Zuma 题目连接: http://www.codeforces.com/contest/608/problem/D Description Genos recently installed t ...

  2. Codeforces Round #336 (Div. 2) D. Zuma 区间dp

    D. Zuma   Genos recently installed the game Zuma on his phone. In Zuma there exists a line of n gems ...

  3. Codeforces Round #336 (Div. 2) D. Zuma(区间DP)

    题目链接:https://codeforces.com/contest/608/problem/D 题意:给出n个宝石的颜色ci,现在有一个操作,就是子串的颜色是回文串的区间可以通过一次操作消去,问最 ...

  4. Codeforces Round #336 (Div. 2)【A.思维,暴力,B.字符串,暴搜,前缀和,C.暴力,D,区间dp,E,字符串,数学】

    A. Saitama Destroys Hotel time limit per test:1 second memory limit per test:256 megabytes input:sta ...

  5. Codeforces Round #336 (Div. 2) C. Chain Reaction set维护dp

    C. Chain Reaction 题目连接: http://www.codeforces.com/contest/608/problem/C Description There are n beac ...

  6. Codeforces Round #336 (Div. 2)B. Hamming Distance Sum 前缀和

    B. Hamming Distance Sum 题目连接: http://www.codeforces.com/contest/608/problem/A Description Genos need ...

  7. Codeforces Round #336 (Div. 2)A. Saitama Destroys Hotel 水题

    A. Saitama Destroys Hotel 题目连接: http://www.codeforces.com/contest/608/problem/A Description Saitama ...

  8. Codeforces Round #336 (Div. 2)B 暴力 C dp D 区间dp

    B. Hamming Distance Sum time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  9. Codeforces Round #336 (Div. 2)

    水 A - Saitama Destroys Hotel 简单的模拟,小贪心.其实只要求max (ans, t + f); #include <bits/stdc++.h> using n ...

随机推荐

  1. JAVA编程心得-多态设计初步

    面向对象的思想中,封装,继承,多态作为特性会在开发中广泛应用,一个健壮的系统除了功能强大以外,它的可扩展性应该也很强,多态恰好应用了这个思路. 下面我以杨小聪去某地的方式为例,我们知道首先杨小聪要去某 ...

  2. [Webpack 2] Import a non-ES6 module with Webpack

    When you have a dependency that does not export itself properly, you can use the exports-loader to f ...

  3. cocos js响应过程

    使用ccbi: js加载ccbi时候,会调用CCBReader的函数readNodeGraphFromData,从根节点递归解析子节点,使用readNodeGraph函数解析单个节点. 当碰到CCMe ...

  4. mysql 如何修改字符串为 utf8

    1.命令行输入mysl 密码之后,然后输入 status可以查看当前的编码 2.来到安装目录X:\%path%\MySQL\MySQL Server 5.0\bin\MySQLInstanceConf ...

  5. 读写应用程序数据-SQLite3

    SQLite3是嵌入到ios中的关系型数据库.对存储大规模的数据非常实用,使得不必将每个对象加到内存中. 支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串和文本).BLOB(二进制 ...

  6. c语言入门经典必背18个程序

    1 . /* 输出 9*9 口诀.共 9 行 9 列, i 控制行, j 控制列. */ #include "stdio.h" main() {int i,j,result; fo ...

  7. oracle EBS中使用PLSQL提交"关闭离散"并发请求

    declare l_request_id number; l_return_flag boolean; l_num_user_id number; l_num_resp_id number; l_nu ...

  8. mono & apache install

    1.red hat 6安装完后网卡是默认不启动的 作为双生兄弟的CENTOS同样如是 第一步 设置网卡开机启动 进入 路径此目录下修改网卡配置文件 如果网卡驱动正常 会有如下文件 只要修改 ifcfg ...

  9. 爬虫神器XPath,程序员带你免费获取周星驰等明星热门电影

    本教程由"做全栈攻城狮"原创首发,本人大学生一枚平时还需要上课,但尽量每日更新文章教程.一方面把我所习得的知识分享出来,希望能对初学者有所帮助.另一方面总结自己所学,以备以后查看. ...

  10. PHP Fatal error问题处理

    今天一个朋友公司网站遇到一个关于PHP的问题: PHP Fatal error:  Allowed memory size of 67108864 bytes exhausted (tried to ...