uvalive 4394 string painter (序列dp)
来源:互联网 发布:淘宝模特兼职价格 编辑:程序博客网 时间:2024/05/17 21:05
两个字符串,s是原串,t是目标串,一次可以把s的任意段所有字母变成同一个字母,问用最少次数将s变成t。
状态转移方程为cnt[i] = min(cnt[i], dp(j+1,i-1,t[i])+1+(j>0 ? cnt[j-1]:0))
代码如下:
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<string>#include<map> #include<set>#define eps 1e-6 #define LL long long using namespace std; const int maxn = 100 + 5;const int INF = 0x3f3f3f3f;char s[maxn], t[maxn];int cnt[maxn], d[maxn][maxn][30];int dp(int start, int end, char shua) {if(d[start][end][shua-'a'] != -1) return d[start][end][shua-'a'];if(start > end) return 0;if(start == end) return shua == t[start] ? 0 : 1;if(shua == t[end]) return dp(start, end-1, shua);int ans = INF;for(int i = end; i >= start; i--) {if(t[i] == t[end]) ans = min(ans, dp(start, i-1, shua)+dp(i, end, t[end])+1);}return d[start][end][shua-'a'] = ans;}void solve() {memset(d, -1, sizeof(d));int len = strlen(s);cnt[0] = s[0] == t[0] ? 0 : 1;for(int i = 1; i < len; i++) {if(s[i] == t[i]) cnt[i] = cnt[i-1];else {cnt[i] = INF;for(int j = i; j >= 0; j--){if(t[j] == t[i] && s[j] != t[j]) cnt[i] = min(cnt[i], dp(j+1,i-1,t[i])+1+(j>0 ? cnt[j-1]:0)); }}}printf("%d\n", cnt[len-1]);}int main() {//freopen("input.txt", "r", stdin);while(scanf("%s%s", s, t) == 2) {solve(); }return 0;}
1 0
- uvalive 4394 string painter (序列dp)
- UVALive - 4394 String painter DP
- HDU 2476 | UVALive 4394 - String painter (区间DP)
- UVALive 4394 String painter
- UVALive 4394 String painter
- hdu String painter(dp)
- UVALive4394-String painter(dp)
- UVA 4394 - String painter(字符串区间DP)
- uva live 4394 String painter 区间dp
- la 4394 string painter 区间dp
- LA 4394 String painter 区间DP -
- Hdu 2476 String painter(区间dp)
- HDU 2476 String painter(区间DP)
- 【HDU 2476】String Painter(区间DP)
- hdu2476 String painter(区间dp)
- hdu 2476 String painter(区间dp)
- HDU 2476 String painter(区间dp)
- HDU 2476 String painter(区间DP)
- JDBC中的装饰着模式
- Servlet开篇
- awk编程总结
- 二叉树建立出现的指针问题 转载~~~~~~~~
- Java多线程中的阻塞队列和并发集合
- uvalive 4394 string painter (序列dp)
- 【机房收费系统】MDI菜单显示子窗体
- C语言文件处理-对图片取模数据的转换
- 【POJ 2049】Finding Nemo
- 关于cocos2d-x 触屏事件不能接收的问题
- log4net - Write log to WinForm TextBox
- Machine Learning Basis
- C++打印位数为n的所有数
- ORACLE EBS架构与管理基础(12.1.3)学习总结