https://codeforces.com/contest/1132/problem/F

借鉴:https://www.cnblogs.com/chhokmah/p/10508762.html

题意

给你一个串s,每次可以花费1的代价删去一个子串,要求子串的每一位为同一个字符。
求删去整个串的最小代价。

分析

这是一道非常简单的区间DP问题,我们定义dp[i][j]表示删去子串[i,j][i,j]的最小花费。
就像合并石子一样,我们枚举中间的k,k的范围是i~j。
为了方便解决问题,将k的定义域定义成一个半闭半合区间[i,j)
决策考虑以下:

    • 如果s[k]=s[j],那么说明当前的区间可以进行消除。
    • 反之,则不能消除。
      那么状态转移方程就是:f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+1−(s[k]==s[j]))

枚举的顺序需要注意 ,

#include<bits/stdc++.h>
using namespace std;
const int N = ;
char str[N];
long long dp[N][N];
int main()
{
int n;scanf("%d%s",&n,str);
for(int i= ; i<n ; i++)
dp[i][i]=; for(int j= ; j<n ; j++)
{
for(int i= ; i<j ; i++ )
{
dp[i][j]=0x3f3f3f3f; for(int k=i ; k<j ; k++)
{
dp[i][j]=min(dp[i][j] , dp[i][k]+dp[k+][j-]+-(int)(str[k]==str[j]));
}
}
} // for(int i=0 ; i<n ; i++)
// {
// for(int j=i+1 ; j<n ; j++)
// {
// dp[i][j]=0x3f3f3f3f;
// for(int k=i ; k<j ; k++)
// {
// dp[i][j] = min(dp[i][j] , dp[i][k] + dp[k+1][j-1] +1 -(str[k]==str[j]));
// }
// }
// }
printf("%lld\n",dp[][n-]);
}

F. Clear the String(区间 DP )//每次都删除一个相同字符的子串 , 最小多少次的更多相关文章

  1. eduCF#61 F. Clear the String /// 区间DP 消除连续一段相同字符 全部消完的最少次数

    题目大意: 给定字符串 每次消除可消除连续的一段相同的字符的子串 求消除整个字符串的最少消除次数 #include <bits/stdc++.h> using namespace std; ...

  2. codeforces#1132 F. Clear the String(神奇的区间dp)

    题意:给出一个字符串S,|S|<=500.每次操作可以删除一段连续的相同字母的子串.问,最少操作多少次可以把这个字符串变成空串. 分析:刚开始的思路是,把连续的串给删除掉,然后再....贪心.完 ...

  3. Codeforces Round #354 (Div. 2)-C. Vasya and String,区间dp问题,好几次cf都有这种题,看来的好好学学;

    C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. Gym - 101196:F Removal Game(区间DP)

    题意:一个环状数组,给定可以删去一个数,代价的相邻两个数的gcd,求最小代价. 思路:区间DP即可,dp[i][j]表示[i,j]区间只剩下i和j时的最小代价,那么dp[i][j]=min  dp[i ...

  5. HDU 4632 Palindrome subsequence(区间dp,回文串,字符处理)

    题目 参考自博客:http://blog.csdn.net/u011498819/article/details/38356675 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. ...

  6. HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)

    Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total ...

  7. JS——数组中push对象,覆盖问题,每次都创建一个新的对象

    今天写运动框架时,发现将对象push进数组,后面的值会覆盖前面的值,最后输出的都是最后一次的值.其实这一切都是引用数据类型惹的祸.       如果你也有类似问题,可以继续看下去哦.       下面 ...

  8. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...

  9. [Baltic2009]beetle【区间Dp】

    Online Judge:Bzoj1761 Label:区间Dp 题目描述 在一条直线上有N个点,每个点M升水. 一个虫子在坐标轴0点上,它每个单位时间移动一格,每个点的水每单位时间消失1升. 问虫子 ...

随机推荐

  1. SpringBoot13 利用mybatis-plus自动生成entity、dao、service、controller

    1 环境配置 = 2 新建一个新的springboot项目 2.1 选择一些必要的依赖 web jpa mysql <?xml version="1.0" encoding= ...

  2. 在英文Win7操作系统上部署C#开发的Web系统出现乱码的解决方法

    今天,迁移机器,把一个使用C#开发的Web系统部署到一台英文版Win7操作系统上,部署好以后,系统可以登录,只是网页上出现汉字乱码. 在这台电脑上,打开Word等文本编辑器,是可以正常输入.显示中文的 ...

  3. sklearn scoring . xgboost.train . ---> rsme

    http://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter 3.3.1. The scoring pa ...

  4. Entity Framework 6.0 Tutorials(9):Stored Procedure Mapping

    Code First - Insert, Update, Delete Stored Procedure Mapping: Entity Framework 6 Code-First provides ...

  5. sql server行列转化

    行列转换: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想变成(得到如下结果): 姓名 语文 数学 物理 ---- - ...

  6. 当Linux用尽内存

    Mulyadi Santosa 也许你很少面临这一情况,但是一旦如此,你一定知道出什么错了:可用内存不足或者说内存用尽(OOM).结果非常典型:你不能再分配内存,内核会杀掉一个任务(一般是正在运行那个 ...

  7. channel_id以及type_id的内容

  8. 关于 XML 字段内容查询

    找到个总结相当好的知识点的归纳,记在自己的博客里也方便查询 /* sql xml 入门:     --by jinjazz     --http://blog.csdn.net/jinjazz     ...

  9. android IntentService和ResultReceiver的异步处理

    IntentService和ResultReceiver的异步处理 1.在下载手机上从网络下载东西的时候会用到AsyncTask来方便处理,这里可以在用IntentService和ResultRece ...

  10. win8 附件数据库失败解决方案《1》

    sql server 2005附加数据库错误:尝试打开或创建物理文件 无法打开物理文件 "E:\works\database\northwnd\northwnd.mdf".操作系统 ...