BZOJ1260: [CQOI2007]涂色paint
2014-11-11 11:05
393 查看
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1260
假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。
n<=50
题解:搬运题解:
令f[i][j]代表将i开始的j个位置刷成相应颜色序列的最小次数,然后状态转移如下:
若s[i]==s[j] 则f[i][j]=min(f[i-1][j],f[i][j-1]) 即将i与右半部分并成一刷子,或者将j与左半部分并成一刷子
若s[i]!=s[j] 则f[i][j]=min{f[i][k]+f[i+k][j-k]} 其中1<=k<j
代码:
View Code
假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。
n<=50
题解:搬运题解:
令f[i][j]代表将i开始的j个位置刷成相应颜色序列的最小次数,然后状态转移如下:
若s[i]==s[j] 则f[i][j]=min(f[i-1][j],f[i][j-1]) 即将i与右半部分并成一刷子,或者将j与左半部分并成一刷子
若s[i]!=s[j] 则f[i][j]=min{f[i][k]+f[i+k][j-k]} 其中1<=k<j
代码:
#include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<map> #include<set> #include<queue> #include<string> #define inf 1000000000 #define maxn 500+100 #define maxm 500+100 #define eps 1e-10 #define ll long long #define pa pair<int,int> #define for0(i,n) for(int i=0;i<=(n);i++) #define for1(i,n) for(int i=1;i<=(n);i++) #define for2(i,x,y) for(int i=(x);i<=(y);i++) #define for3(i,x,y) for(int i=(x);i>=(y);i--) #define mod 1000000007 using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();} return x*f; } int n,f[maxn][maxn]; char s[maxn]; int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); scanf("%s",s+1);n=strlen(s+1); for1(i,n)f[i][i]=1; for1(l,n-1) for1(i,n-l) { int j=i+l;f[i][j]=inf; if(s[i]==s[j]) { if(l==1)f[i][j]=1; else f[i][j]=min(f[i][j-1],f[i+1][j]); } else for2(k,i,j-1)f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); } printf("%d\n",f[1] ); return 0; }
View Code
相关文章推荐
- BZOJ 1260: [CQOI2007]涂色paint 区间DP
- BZOJ 1260: [CQOI2007]涂色paint【区间DP】
- bzoj1260[CQOI2007]涂色paint(区间dp)
- bzoj1260[CQOI2007]涂色paint
- bzoj 1260: [CQOI2007]涂色paint(区间DP)
- BZOJ1260 [CQOI2007]涂色paint 【区间dp】
- bzoj1260 [CQOI2007]涂色paint
- BZOJ 1260: [CQOI2007]涂色paint【区间DP】
- BZOJ1260: [CQOI2007]涂色paint 区间DP
- BZOJ1260: [CQOI2007]涂色paint
- 【bzoj1260】 [CQOI2007]【区间DP】涂色paint 【一个空序列,每次可以将连续(注意这个条件)的一段染成同一颜色,问最少次才能到目标状态】
- BZOJ 1260:[CQOI2007]涂色paint
- 【bzoj1260】涂色paint[CQOI2007](区间dp)
- BZOJ 1260: [CQOI2007]涂色paint( 区间dp )
- 【bzoj1260】[CQOI2007]涂色paint
- BZOJ1260 [CQOI2007]涂色paint
- bzoj千题计划185:bzoj1260: [CQOI2007]涂色paint
- BZOJ1260[CQOI2007]涂色paint (区间DP)
- bzoj1260: [CQOI2007]涂色paint
- 【bzoj1260】[CQOI2007]涂色paint