HDU2476——String painter(区间dp)
来源:互联网 发布:手机淘宝怎么改用户名 编辑:程序博客网 时间:2024/06/06 02:34
得分成两个部分解决这个问题
dp[i][j]表示把一个空串(或者与目标串完全不同的串)刷成目标串所需要的步数。
我们去寻找目标串中间的字符,如果和这段头相同,就相当于在刷它的时候顺便刷了字符串头。
然后在根据第一步结果求res。
#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>#include <iostream>using namespace std;const int MAXN =310;const int INF =1000000007 ;const int MOD =1000000007;const double EPS=1e-8;const double pi = acos(-1);int dp[MAXN][MAXN];int ans[MAXN];string a,b;int main(){ while(cin>>a>>b){ int n=a.length(); memset(dp,0,sizeof(dp)); memset(ans,0,sizeof(ans)); for(int k=0;k<n;k++){ for(int i=0;i+k<n;i++){ int j=i+k; dp[i][j]=min(dp[i+1][j]+1,dp[i][j-1]+1); for(int m=i+1;m<=j;m++){ if(b[m]==b[i]){ dp[i][j]=min(dp[i][j],dp[i+1][m]+dp[m+1][j]); } } } } for(int i=0;i<n;i++) ans[i]=dp[0][i]; for(int i=0;i<n;i++){ if(a[i]==b[i]) ans[i]=ans[i-1]; else{ for(int j=0;j<i;j++){ ans[i]=min(ans[j]+dp[j+1][i],ans[i]); } } } printf("%d\n",ans[n-1]); }}
0 0
- hdu2476——String painter(区间DP)
- HDU2476——String painter(区间dp)
- hdu2476 String painter(区间dp)
- hdu2476 String painter (区间DP)
- HDU2476:String painter(区间dp)
- String painter hdu2476(区间dp)
- HDU2476:String painter(区间DP)
- HDU2476:String painter(区间DP)
- HDU2476 String painter 区间DP
- HDU2476-String painter-区间DP
- HDU2476:String painter 区间dp
- hdu2476 string painter 区间dp
- HDU2476(String painter)DP
- hdu2476——String painter
- hdu2476(区间DP)
- hdu2476(区间dp)
- hdu2476(区间DP)
- hdu2476 String painter
- java电子签章
- 14、canvas标签之事件
- mysql之触发器trigger ---谷营中西
- 注解
- 通过SE14重建数据库表
- HDU2476——String painter(区间dp)
- JZOJ 4709 Matrix【NOIP2016提高A组模拟8.17】
- system.exception所有子类详解
- 移动消息类业务的融合组网架构研究
- Hbase中Hdfs相关的常用命令
- JAVA中的接口和抽象类(转)
- MyBatis(二)
- 第一次机房收费系统--MDI主窗体与子窗体的显
- oracle索引