hdu 2476-区间DP
来源:互联网 发布:sql server证 编辑:程序博客网 时间:2024/06/15 05:48
解题思路:dp[i][j]表示i位置到j位置变换后所需最小次数。因为我们一开始初始dp[i][j]为dp[i+1][j]+1,那么我们只需要考虑i与I+1直接是否有与i相同的字符,那么状态转移为dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]).之后还要再对dp[1][1~n]进行优化。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include<algorithm>>using namespace std;#define inf 0x3f3f3f3fconst int mx = 1e2+10;int n,m,dp[mx][mx],ans[mx];char str[mx],stc[mx];int main(){ while(~scanf("%s%s",str+1,stc+1)){ int len = strlen(str+1); memset(dp,0,sizeof(dp)); for(int i=1;i<=len;i++) dp[i][i] = 1; for(int t=1;t<=len;t++){ for(int i=1;i<=len;i++){ int j = i+t; if(j>len) break; dp[i][j] = dp[i+1][j]+1; for(int k=i+1;k<=j;k++) if(stc[i]==stc[k]) dp[i][j] = min(dp[i][j],dp[i+1][k]+dp[k+1][j]); } } for(int i=1;i<=len;i++) ans[i] = dp[1][i]; for(int i=1;i<=len;i++){ if(str[i]==stc[i]) ans[i] = ans[i-1]; else{ for(int j=1;j<i;j++) ans[i] = min(ans[i],ans[j]+dp[j+1][i]); } } printf("%d\n",ans[len]); } return 0;}
阅读全文
0 0
- hdu 区间dp 2476
- HDU 2476 区间dp
- HDU 2476 区间DP
- hdu 2476 区间dp
- hdu 2476 区间dp
- hdu 2476 区间dp
- hdu 2476 区间DP
- HDU 2476 区间DP
- HDU 2476 区间DP
- hdu 2476-区间DP
- HDU-2476(区间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)
- 关于两个DIV各占50%时无法在同一行显示的问题
- oracle数据库基础知识精讲视频分享!
- 《人人都是产品经理》——第三章笔记(下)
- Activiti学习之spring boot 与activiti整合
- JS学习(8)----For和Errors
- hdu 2476-区间DP
- 在android studio中做一个简易的计算器
- Java 5.0注解知识快速进阶
- 关于数组排序问题的详细过程
- 行锁妙用
- 数据结构之二叉查找树
- window批处理删除文件夹下所有大小为1651字节的jpg图片
- Arpa’s obvious problem and Mehrdad’s terrible solution (CodeForces
- hdu 2476 String painter