poj 3280 字符串上的动态规划
来源:互联网 发布:node实战 编辑:程序博客网 时间:2024/04/30 02:28
添加或者删除一些字母,使这个字符串变成回文串。每个字母添加和删除的代价不一样。问最小代价。
看别人的思路,在字符串两端删除和添加字母是等价的,因此只需要保留删除和添加中最小的一个对字符串进行修改就行。
另外设置dp[i][j]表示从i到j的变成回文串的最小代价,那么会有:
dp[i][j]=dp[i+1][j-1](a[i]==a[j])
dp[i][j]=max(dp[i+1][j]+w[a[i]-'a'],dp[i][j-1]+w[a[j]-'a'])
//poj3280#include<map>#include<vector>#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<stack>#include<queue>#include<set>#define inf 0x3f3f3f3f#define mem(a,x) memset(a,x,sizeof(a))using namespace std;typedef long long ll;typedef pair<int,int> pii;inline int in(){ int res=0;char c; while((c=getchar())<'0' || c>'9'); while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res;}char a[2222];int w[27];int dp[2002][2002];int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { getchar(); gets(a); for(int i=0;i<n;i++) { char c=getchar(); int t1=in(); int t2=in(); w[c-'a']=min(t1,t2); } mem(dp,0); for(int i=m-1;i>=0;i--) { for(int j=i+1;j<m;j++) { if(a[i]==a[j]) { dp[i][j]=dp[i+1][j-1]; } else { dp[i][j]=min(dp[i+1][j]+w[a[i]-'a'],dp[i][j-1]+w[a[j]-'a']); } } } printf("%d\n",dp[0][m-1]); } return 0;}
0 0
- poj 3280 字符串上的动态规划
- 禁止字符串 字符串上的动态规划
- poj 2096 期望上的动态规划
- 字符串上的动态规划算法应用
- 2014.7.14 CodeForces C题 字符串上的动态规划
- 一道动态规划的poj
- 暗黑的字符串-动态规划
- ACM_DAG上的动态规划
- DAG上的动态规划
- DAG上的动态规划
- DAG上的动态规划
- DAG上的动态规划
- DAG上的动态规划
- poj 2287 Tian Ji -- The Horse Racing 贪心思想在动态规划上的应用
- POJ 2057 The Lost House 树型dp+贪心思想在动态规划上的应用
- GDOI2016模拟4.22 无界单词 字符串上的动态规划
- 【NOIP2001提高组T3】统计单词个数-字符串上的动态规划
- 【NOIP2015提高组T5】子串-字符串上的动态规划
- EJB学习笔记之十(BMT事务和CMT事务)
- jQuery FlexSlider插件的详细设置参数
- Unity3d实现画笔
- centos7 下安装Apache2+MariaDB+PHP5过程详解
- Qt中使用html语言对word进行图表操作
- poj 3280 字符串上的动态规划
- tablview性能优化&instrument详解
- 获得手势所在的图片坐标 & CGRectContainsPoint
- 面试30 求数组中最小的k个数
- HDU 4932/BC 4B Miaomiao's Geometry
- Shiro学习(19)动态URL权限限制
- 《图论》——最短路径 Dijkstra算法(戴克斯特拉算法)
- 1027. Colors in Mars (20)
- C语言计算某天是一年中的第几天(熟练使用状态位flag)