2017年8月9日提高组T2 覆盖
来源:互联网 发布:仓库数据表格 编辑:程序博客网 时间:2024/05/16 17:39
Description
现在小B拿到了一条长度为n的木块,初始时上面什么颜色都没有。为了美观,现在小B希望把它的n个单位长度分别涂上红、绿、蓝三种颜色,每种颜色可以用一个大写字母表示,分别是:RGB。作为一个不合格的油漆工,每次你可以把一段连续的木版涂成随意一种颜色,但是你发现,后涂的颜色会覆盖先涂的颜色。为了方便,请你用尽量少的涂色次数达到目标。
Input
输入仅一行,为一个长度为n的字符串,仅由上述三种大写字母组成,表示目标颜色。
Output
一行一个整数,表示最小的涂色次数。
Sample Input
RGBGR
Sample Output
3
Hint
对于前40%的数据,n<=10.
对于前100%的数据,n<=50.
做法:设定dp[l][r];表示l到r的答案,
我们考虑
s[l]==s[r]时,转移就是dp[l][r]=min(dp[l+1][r],dp[l][r-1]);
s[r]==s[r-1],转移就是dp[l][r] = dp[l][r-1];
s[l]==s[l+1],转移就是dp[l][r] = dp[l+1][r];
其他就是取两个区间和之最小
代码如下:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int f[60][60];char s[60];int main(){ cin>>s; int n=strlen(s)-1; for (int i=0;i<=n;i++) for (int j=0;j<=n;j++) f[i][j]=10000000; for (int i=0;i<=n;i++) f[i][i]=1; for (int i=n-1;i>=0;i--) for (int j=i+1;j<=n;j++) { if (s[i]==s[j]) f[i][j]=min(f[i+1][j],f[i][j-1]); if (s[i]==s[i+1]) f[i][j]=f[i+1][j]; if (s[j]==s[j-1]) f[i][j]=f[i][j-1]; if (s[i]!=s[j] && s[i]!=s[i+1] && s[j]!=s[j-1]) { int p=10000000; for (int k=i;k<=j;k++) { p=min(p,f[i][k]+f[k+1][j]); } f[i][j]=p; } } cout<<f[0][n];}
阅读全文
0 0
- 2017年8月9日提高组T2 覆盖
- 2017年8月9日提高组T2 覆盖
- 2017年8月9日提高组T2 覆盖
- SSL2674 2017年8月9日提高组T2 覆盖(dp)
- 【SSLGZ 2674】2017年8月9日提高组T2 覆盖
- SSL2748 2017年9月26日提高组T2 房屋覆盖(贪心)
- 2017年9月16日提高组T2 A
- 2017年8月15日提高组T2 购买
- 2017年8月14日提高组T2 温度
- 2017年8月15日提高组T2 购买
- 2017年8月16日提高组T2 疾病
- 2017年8月17日提高组T2 考试
- 2017年10月6日提高组T2 挖矿
- 2017年10月6日提高组T2 挖矿
- 2017年11月1日提高组T2 树论
- 2017年8月8日提高组T2 呀!回文串
- SSL2671 2017年8月8日提高组T2 呀!回文串(dp)
- 2017年8月8日提高组T2 呀!回文串
- 设计模式学习笔记四:工厂方法(Factory Method)
- MongoDB文档存储
- js系列教程9-表单元素全解
- 爬虫实战4—多线程与多进程爬虫
- Android ButterKnife Zelezny 插件
- 2017年8月9日提高组T2 覆盖
- HDU6092 Rikka with Subset-01背包dp-2017多校联盟5 第8题
- Java字符串常用方法
- SSL2673 2017年8月9日提高组T1 水题
- 关于byte的溢出问题
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- matlab多维数组操作
- Mac安装Tensorflow,运行项目报错: module compiled against API version 0xa but this version of numpy is 0x9
- Android Code Generator