博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1260&UVa 4394 区间DP
阅读量:4654 次
发布时间:2019-06-09

本文共 4063 字,大约阅读时间需要 13 分钟。

题意:

  给一段字符串成段染色,问染成目标串最少次数.

SOL:

  区间DP...

  DP[i][j]表示从i染到j最小代价

  转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]);

CODE:

  BZ:

/*=================================================================# Created time: 2016-03-28 21:10# Filename: uva4394.cpp# Description: =================================================================*/#define me AcrossTheSky #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lowbit(x) (x)&(-x) #define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++) #define FORP(i,a,b) for(int i=(a);i<=(b);i++) #define FORM(i,a,b) for(int i=(a);i>=(b);i--) #define ls(a,b) (((a)+(b)) << 1) #define rs(a,b) (((a)+(b)) >> 1) #define getlc(a) ch[(a)][0] #define getrc(a) ch[(a)][1] #define maxn 500#define maxm 100000 #define pi 3.1415926535898 #define _e 2.718281828459 #define INF 1070000000 using namespace std; typedef long long ll; typedef unsigned long long ull; template
inline void read(T& num) { bool start=false,neg=false; char c; num=0; while((c=getchar())!=EOF) { if(c=='-') start=neg=true; else if(c>='0' && c<='9') { start=true; num=num*10+c-'0'; } else if(start) break; } if(neg) num=-num; } /*==================split line==================*/ char A[maxn],C[maxn];int dp[maxn][maxn],ans[maxn];int main(){ freopen("a.in","r",stdin); //while (scanf("%s",C)!=EOF){ scanf("%s",A); //FORP(i,0,maxn) B[i]=''; int n=strlen(A); memset(dp,0,sizeof(dp)); FORP(i,0,n-1) FORP(j,i,n-1) dp[i][j]=INF; FORP(i,0,n-1) dp[i][i]=1; FORP(l,1,n-1) FORP(i,0,n-1-l) { int j=i+l; dp[i][j]=dp[i+1][j]+1; FORP(k,i+1,j) if (A[k]==A[i]) dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]); } printf("%d",dp[0][n-1]); //FORP(i,0,n-1) // FORP(j,i,n-1) printf("%d%c",dp[i][j],j==n-1?'\n':' '); /*memset(ans,0,sizeof(ans)); ans[0]=(A[0]!=C[0]); FORP(i,1,n-1) if (A[i]==C[i]) ans[i]=ans[i-1]; else { ans[i]=dp[0][i]; FORP(j,0,i-1) ans[i]=min(ans[i],ans[j]+dp[j+1][i]); } printf("%d\n",ans[n-1]); }*/}

 UVa:

  

/*=================================================================# Created time: 2016-03-28 21:10# Filename: uva4394.cpp# Description: =================================================================*/#define me AcrossTheSky #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lowbit(x) (x)&(-x) #define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++) #define FORP(i,a,b) for(int i=(a);i<=(b);i++) #define FORM(i,a,b) for(int i=(a);i>=(b);i--) #define ls(a,b) (((a)+(b)) << 1) #define rs(a,b) (((a)+(b)) >> 1) #define getlc(a) ch[(a)][0] #define getrc(a) ch[(a)][1] #define maxn 500#define maxm 100000 #define pi 3.1415926535898 #define _e 2.718281828459 #define INF 1070000000 using namespace std; typedef long long ll; typedef unsigned long long ull; template
inline void read(T& num) { bool start=false,neg=false; char c; num=0; while((c=getchar())!=EOF) { if(c=='-') start=neg=true; else if(c>='0' && c<='9') { start=true; num=num*10+c-'0'; } else if(start) break; } if(neg) num=-num; } /*==================split line==================*/ char A[maxn],C[maxn];int dp[maxn][maxn],ans[maxn];int main(){ freopen("a.in","r",stdin); while (scanf("%s",C)!=EOF){ scanf("%s",A); //FORP(i,0,maxn) B[i]=''; int n=strlen(A); memset(dp,0,sizeof(dp)); FORP(i,0,n-1) FORP(j,i,n-1) dp[i][j]=INF; FORP(i,0,n-1) dp[i][i]=1; FORP(l,1,n-1) FORP(i,0,n-1-l) { int j=i+l; dp[i][j]=dp[i+1][j]+1; FORP(k,i+1,j) if (A[k]==A[i]) dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]); } //FORP(i,0,n-1) // FORP(j,i,n-1) printf("%d%c",dp[i][j],j==n-1?'\n':' '); memset(ans,0,sizeof(ans)); ans[0]=(A[0]!=C[0]); FORP(i,1,n-1) if (A[i]==C[i]) ans[i]=ans[i-1]; else { ans[i]=dp[0][i]; FORP(j,0,i-1) ans[i]=min(ans[i],ans[j]+dp[j+1][i]); } printf("%d\n",ans[n-1]); }}

 

转载于:https://www.cnblogs.com/YCuangWhen/p/5330760.html

你可能感兴趣的文章
lambda表达式树
查看>>
二次注入原理及防御
查看>>
会话记住已登录功能
查看>>
Linux内核分析——可执行程序的装载
查看>>
第一阶段冲刺3
查看>>
父类引用指向子类对象
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>
章三 链表
查看>>
Solution for Concurrent number of AOS' for this application exceeds the licensed number
查看>>
CSE 3100 Systems Programming
查看>>
IntelliJ IDEA 的Project structure说明
查看>>
Java Security(JCE基本概念)
查看>>
Linux Supervisor的安装与使用入门
查看>>
创建 PSO
查看>>
JasperReport报表设计4
查看>>
项目活动定义 概述
查看>>
团队冲刺04
查看>>