HDU 2476 区间DP
2016-03-04 20:45
453 查看
HDU 2476
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2476
题意:
把字符串a变成字符串b,每次可以使一段区间变成同一个字母。问最少变换次数。
思路:
明显的区间DP。然而没有弄清楚转移方程是什么。
题解仔细一想还是挺神奇的。先假设所有的a字符串中字母和b中均不相同,dp[i][j]表示最小化把i-j刷成b字符串的代价。遍历i-j中字母,若存在b[i] == b[k],则可以有转移方程dp[i+1][k]+dp[k+1][j]。
然后回到现实情况。Ans[i]表示从头刷到第j个字母代价。详情转移见代码。
没想出本题原因
1.基于a[i] == b[i] && a[k] == b[k]的讨论,造成讨论变成高维度难以进行。
源码:
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2476
题意:
把字符串a变成字符串b,每次可以使一段区间变成同一个字母。问最少变换次数。
思路:
明显的区间DP。然而没有弄清楚转移方程是什么。
题解仔细一想还是挺神奇的。先假设所有的a字符串中字母和b中均不相同,dp[i][j]表示最小化把i-j刷成b字符串的代价。遍历i-j中字母,若存在b[i] == b[k],则可以有转移方程dp[i+1][k]+dp[k+1][j]。
然后回到现实情况。Ans[i]表示从头刷到第j个字母代价。详情转移见代码。
没想出本题原因
1.基于a[i] == b[i] && a[k] == b[k]的讨论,造成讨论变成高维度难以进行。
源码:
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <string> #include <iostream> #include <algorithm> using namespace std; const int MAXN = 100 + 6; int dp[MAXN][MAXN]; int ans[MAXN]; char a[MAXN], b[MAXN]; int main() { while(scanf("%s%s", a, b) != EOF){ int n = strlen(a); memset(dp, 0, sizeof dp); for(int j = 0 ; j < n ; j++){ for(int i = j; i >= 0 ; i--){ 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 = 0 ; i < n ; i++) printf("%d ", dp[0][i]); // printf("\n"); memset(ans, 0, sizeof ans); for(int i = 0 ; i < n ; i++) ans[i] = dp[0][i]; for(int i = 0 ; i < n ; i++){ if(a[i] == b[i]){ if(i == 0) ans[i] = 0; else ans[i] = ans[i - 1]; } else{ for(int k = 0 ; k < i ; k++) ans[i] = min(ans[i], ans[k] + dp[k + 1][i]); } } printf("%d\n", ans[n - 1]); } return 0; }
相关文章推荐
- 解决nginx_1.4+MySql_5.6 中文乱码(问号)问题
- Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
- uva221
- jQuery新手知识
- jquery中mouseout和mouseleave 事件的区别
- Adaptive Thresholding & Otsu’s Binarization
- OC_Class
- C语言枚举
- 校园网&openwrt记(十一)策略路由实践 游戏端口走校园网关
- poj3469 Dual Core CPU 网络流 sap邻接表模板
- GDKOI2016总结
- 如何把Eclipse工程import Exprot到Android Studio
- saiku源代码安装
- 层次聚类的介绍
- saiku源代码安装
- 联合体以及如何调出内存窗口
- 试一试写博客的感觉
- 动态添加和删除Spinner(ArrayList与Widget的依赖性)
- shell编程(一):简单命令
- C++学习笔记:const_cast类型转化