SSL2674 2017年8月9日提高组T2 覆盖(dp)
来源:互联网 发布:java微信支付查询订单 编辑:程序博客网 时间:2024/05/22 05:02
2017年8月9日提高组T2 覆盖
Description
现在小B拿到了一条长度为n的木块,初始时上面什么颜色都没有。为了美观,现在小B希望把它的n个单位长度分别涂上红、绿、蓝三种颜色,每种颜色可以用一个大写字母表示,分别是:RGB。作为一个不合格的油漆工,每次你可以把一段连续的木版涂成随意一种颜色,但是你发现,后涂的颜色会覆盖先涂的颜色。为了方便,请你用尽量少的涂色次数达到目标。
Input
输入仅一行,为一个长度为n的字符串,仅由上述三种大写字母组成,表示目标颜色。
Output
一行一个整数,表示最小的涂色次数。
分析:设f[i][j]表示从i到j完全匹配的最小值,当s[i]=s[j]时,f[i][j]=min(f[i][j-1],f[i+1][j],f[i+1][j-1]+1),否则,f[i][j]=min(f[i][k],f[k+1][j]),i
#include <cstdio>#include <iostream>#include <cstring>#include <string>using namespace std;int f[57][57],n;char st[57];int min(int x,int y){ if (x<y) return x; return y;}int main(){ cin>>st; n=strlen(st)-1; for (int i=0;i<=n;i++) for (int j=0;j<=n;j++) if (i!=j) f[i][j]=12345678; else f[i][j]=1; for (int i=n-1;i>=0;i--) for (int j=i+1;j<=n;j++) { if (st[i]==st[j]) { f[i][j]=min(f[i+1][j],f[i][j-1]); f[i][j]=min(f[i][j],f[i+1][j-1]+1); continue; } for (int k=i+1;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); } printf("%d",f[0][n]);}
阅读全文
0 0
- SSL2674 2017年8月9日提高组T2 覆盖(dp)
- 2017年8月9日提高组T2 覆盖
- 2017年8月9日提高组T2 覆盖
- 2017年8月9日提高组T2 覆盖
- 【SSLGZ 2674】2017年8月9日提高组T2 覆盖
- SSL2748 2017年9月26日提高组T2 房屋覆盖(贪心)
- SSL2671 2017年8月8日提高组T2 呀!回文串(dp)
- SSL2843 2017年11月8日提高组T2 拆网线(树形dp)
- SSL2759 2017年10月6日提高组T2 挖矿(dp)
- SSL2792 2017年10月25日提高组T2 数字问题(数位dp)
- SSl2794 2017年10月26日提高组T2 Dark(dp)
- 【SSLGZ 2794】2017年10月26日提高组T2 Dark(dp)
- SSL2812 2017年10月30日提高组T2 凤凰院凶真(dp,LCIS)
- SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)
- SSL2841 2017年11月7日提高组T2 好路线(dp)
- 2017年9月16日提高组T2 A
- 2017年8月15日提高组T2 购买
- 2017年8月14日提高组T2 温度
- throwable的子类
- (51nod)动态规划基础篇练习题
- tfidf给每个词加权重
- 用一个小例子来认识Java多态
- 设计模式学习笔记六:.NET反射工厂
- SSL2674 2017年8月9日提高组T2 覆盖(dp)
- 关于Neo4j数据库连接出现的问题
- 数据结构——栈(c语言)
- 【PAT】【Advanced Level】1058. A+B in Hogwarts (20)
- centos 6.9 安装 Discuz3.2X 论坛
- String初探
- 笔记——多重背包
- Web Animations API (JS动画利器)
- JAVA运行时异常及常见的5中RuntimeExecption