hdu 2476 String painter【区间dp】
来源:互联网 发布:淘宝补单技巧 编辑:程序博客网 时间:2024/06/03 13:52
点击打开链接
题意:
给你两个字符串,a,and b
问你a->b,最少需要几步。
每步的操作是这样的,可以选定区间[l,r]使其中的字符都变成某个字符。
题解:
首先处理字符串b。
由空串->b串可以由一个区间转化而来,
然后用一个ans数组记录空->b的前i项最小变化量,
最后比较a串,
如果a[i]==b[i],那么ans[i]=ans[i-1];
否则,再遍历一遍前i区间的组合,确定ans[i]的最小值。
#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=105;char a[maxn],b[maxn];int ans[maxn];int dp[maxn][maxn];int main(){ while(~scanf("%s %s",a+1,b+1)){ memset(dp,0,sizeof(dp)); int la=strlen(a+1); for(int l=0;l<=la;++l){ for(int i=1;i+l<=la;++i){ int j=i+l; dp[i][j]=dp[i+1][j]+1; for(int k=i+1;k<=j;++k){ if(b[i]==b[k])dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]); } } } for(int i=1;i<=la;++i) ans[i]=dp[1][i]; for(int i=1;i<=la;++i){ if(a[i]==b[i]){ ans[i]=ans[i-1]; }else{ for(int k=1;k<i;++k){ ans[i]=min(ans[i],ans[k]+dp[k+1][i]); } } } printf("%d\n",ans[la]); } return 0;}
阅读全文
0 0
- hdu 2476 String painter 区间dp
- hdu 2476 String painter 区间dp
- HDU 2476 String painter 区间dp
- hdu 2476 String painter(区间DP)
- hdu 2476 String painter (区间dp)
- Hdu 2476 String painter(区间dp)
- HDU 2476 String painter(区间DP)
- 【HDU 2476】String Painter(区间DP)
- HDU 2476 - String painter(区间DP)
- hdu 2476 String painter(区间dp)
- HDU 2476 String painter(区间dp)
- HDU 2476 String painter (区间DP)
- HDU 2476 String painter(区间DP)
- hdu 2476 String painter(区间DP)
- HDU 2476 String painter(区间DP)
- HDU 2476 String painter(区间DP)
- hdu 2476 String painter(区间dp)
- HDU 2476 String painter(区间dp)
- CSS3-阴影
- php垃圾回收机制
- [MySQL 5.6优化] -- limit x,x 优化
- linux-011文件系统节点操作函数解析
- Springboot的AOP不生效
- hdu 2476 String painter【区间dp】
- 关键性能指标及其度量方法
- linux-011中位图操作函数(申请释放节点,申请释放block)解析
- 【C语言】C语言结构体解析
- tomcat80端口访问网址
- python 多进程
- nginx反向代理及负载均衡
- ArrayList和LinkedList性能比较分析
- linux nmon的安装及使用