【bzoj1260】涂色paint[CQOI2007](区间dp)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1260
这道题其实和codeforces607B有点像,然而做过原题的我居然没看出来。。思想僵化。。
首先,题目中每次染色的是一段连续区间,大概就能想到区间dp,于是我们可以设$ f[l][r] $表示区间$ [l,r] $需要染的次数。
转移的话,首先我们可以把区间$ [l,r] $拆成两部分分别染,此时$ f[l][r]=\min \left\{f[l][k]+f[k+1][r] \right\} \ (l<=k<r) $,答案就是$ f[1,n] $。
此外如果第$ l $和$ r $个位置颜色相同,还可以同时染色,这样有三种情况:
1、把区间$ [l,r] $染色,然后继续染区间$ f[l+1,r-1] $,此时$ f[l][r]=f[l+1][r-1]+1 $;
2、对于区间$ [l+1,r] $的染色方案中把位置$ r $染上色的区间,将其左端点拉到位置$ l $,使位置$ l $染上色,此时$ f[l][r]=f[l+1][r] $;
3、对于区间$ [l,r-1] $的染色方案中把位置$ l $染上色的区间,将其右端点拉到位置$ r $,使位置$ r $染上色,此时$ f[l][r]=f[l][r-1] $;
于是这样转移方程就胡出来了。。
代码:
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 100020
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
using namespace std;
int f[][];
char s[];
int n;
int main()
{
scanf("%s",s); n=strlen(s);
memset(f,0x3f,sizeof(f));
for(int i=;i<=n;i++)f[i][i]=;
for(int i=;i<=n;i++)
for(int l=;l<=n-i+;l++){
int r=l+i-;
if(s[l-]==s[r-])f[l][r]=min(f[l+][r-]+,min(f[l+][r],f[l][r-]));
for(int k=l;k<r;k++)
f[l][r]=min(f[l][r],f[l][k]+f[k+][r]);
}
printf("%d\n",f[][n]);
}
bzoj1260
【bzoj1260】涂色paint[CQOI2007](区间dp)的更多相关文章
- BZOJ_1260_[CQOI2007]涂色paint _区间DP
BZOJ_1260_[CQOI2007]涂色paint _区间DP 题意: 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字 ...
- BZOJ1260 CQOI2007 涂色paint 【区间DP】
BZOJ1260 CQOI2007 涂色paint Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字 ...
- 「CQOI2007」「BZOJ1260」涂色paint (区间dp
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 2057 Solved: 1267[Submit][St ...
- 2018.09.17 bzoj1260: [CQOI2007]涂色paint(区间dp)
传送门 区间dp简单题啊. 很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价. 这样可以O(n)O(n)O(n)枚举断点转移了啊. 显然如果断 ...
- BZOJ 1260 [CQOI2007]涂色paint(区间DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1260 [题目大意] 假设你有一条长度为n的木版,初始时没有涂过任何颜色 每次你可以把一 ...
- BZOJ 1260: [CQOI2007]涂色paint【区间DP】
Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...
- 【BZOJ】1260 [CQOI2007]涂色paint(区间dp)
题目 传送门:QWQ 分析 区间dp, 详见代码 代码 /************************************************************** Problem: ...
- 【题解】 bzoj1260: [CQOI2007]涂色paint (区间dp)
bzoj1260,懒得复制,戳我戳我 Solution: 这种题目我不会做qwq,太菜了 区间打牌(dp) 用f[l][r]表示从l到r最少需要染几次色. 状态转移方程: 1.\(f[l][r]=mi ...
- [CQOI2007]涂色 BZOJ 1260 区间dp
题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个 ...
随机推荐
- Android Studio下通过Gradle配置实现资源文件的模块化
当开发一个app模块个数很多的时候,资源文件就会特别多,布局也会多起来,这时所有的layout都放在同一个目录下,就会显得臃肿,而且不好找相应的布局. 最近看到相关资料,发现在Android Stud ...
- SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 2)
(三)使用SPQuery进行列表查询 1.概述 列表查询主要是指在一个指定的列表(或文档库)中按照某些筛选.排序条件进行查询.列表查询主要使用SPQuery对象,以及SPList的GetItems方法 ...
- 【转】NPOI自定义单元格背景颜色
经常在NPOI群里聊天时发现有人在问NPOI设置单元格背景颜色的问题,而Tony Qu大神的博客里没有相关教程,刚好最近在做项目时研究了一下这一块,在这里总结一下. 在NPOI中默认的颜色类是HSSF ...
- dev 小问题列表
1. MemoEdit > Lines Text lines are separated by line feed and carriage return characters ("\ ...
- Java源码之Object
本文出自:http://blog.csdn.net/dt235201314/article/details/78318399 一丶概述 JAVA中所有的类都继承自Object类,就从Object作为源 ...
- VS2015 如何打印出 类的内存布局?
项目->属性->C/C++->命令行 添加如下内容: /d1 reportAllClassLayout [XXX] XXX 可选,代表源文件名,例如 main.cpp 或 /d1 r ...
- Android学习资源网站大全
https://github.com/zhujun2730/Android-Learning-Resources 整理了一些 Android 的博客链接.学习资源网站.站在巨人的肩膀上,会看得更远.整 ...
- android学习三---创建第一个程序
1.创建一个Helloworld程序 1.1 new-android application 点击file-new-android application出现如下界面 填上应用名,项目名,包名,选择所 ...
- 根据URL请求 返回XML字符串
public static string GetHttpResponse(string url) { string content = ""; // Create a new Ht ...
- python read文件的r和rb的区别
r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据,并截断以前的内容 'a':表示要向文件 ...