传送门

一道最简单的区间dp,然而我还是抄了题解。

  1. //Twenty
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<cstdio>
  7. #include<vector>
  8. #include<cmath>
  9. #include<queue>
  10. #include<ctime>
  11. const int maxn=2005;
  12. typedef long long LL;
  13. using namespace std;
  14. int n,m,cost[30],a,b;
  15. char s[maxn];
  16.  
  17. namespace fastIO {
  18. const int sz=1<<15|1;
  19. char ch,buf[sz],*l,*r;
  20. void gechar(char &c) {
  21. if(l==r) r=(l=buf)+fread(buf,1,sz,stdin);
  22. c = l==r?(char)EOF:*l++;
  23. }
  24. template<typename T> void read(T &x) {
  25. int f=1; x=0; gechar(ch);
  26. while(ch!='-'&&(ch<'0'||ch>'9')) gechar(ch);
  27. if(ch=='-') f=-1,gechar(ch);
  28. for(;ch>='0'&&ch<='9';gechar(ch)) x=x*10+ch-'0'; x*=f;
  29. }
  30. }
  31.  
  32. int dp[maxn][maxn];
  33. void work() {
  34. memset(dp,127,sizeof(dp));
  35. for(int i=1;i<=m;i++) {
  36. dp[i][i]=0;
  37. if(s[i]==s[i+1]) dp[i][i+1]=0;
  38. }
  39. for(int l=2;l<=m;l++) {
  40. for(int i=1;i+l-1<=m;i++) {
  41. int j=i+l-1;
  42. if(l>2&&s[i]==s[j]) dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
  43. dp[i][j]=min(dp[i][j],dp[i][j-1]+cost[s[j]-'a']);
  44. dp[i][j]=min(dp[i][j],dp[i+1][j]+cost[s[i]-'a']);
  45. }
  46. }
  47. printf("%d\n",dp[1][m]);
  48. }
  49.  
  50. void init() {
  51. fastIO::read(n);
  52. fastIO::read(m);
  53. char ch;
  54. fastIO::gechar(ch);
  55. while(ch<'a'||ch>'z')
  56. fastIO::gechar(ch);
  57. for(int i=1;i<=m;i++) {
  58. s[i]=ch; fastIO::gechar(ch);
  59. }
  60. for(int i=1;i<=n;i++) {
  61. fastIO::gechar(ch);
  62. while(ch<'a'||ch>'z') fastIO::gechar(ch);
  63. fastIO::read(a);
  64. fastIO::read(b);
  65. cost[ch-'a']=min(a,b);
  66. }
  67. }
  68.  
  69. //#define DEBUG
  70. int main() {
  71. #ifdef DEBUG
  72. freopen("1.in","r",stdin);
  73. //freopen(".out","w",stdout);
  74. #endif
  75. init();
  76. work();
  77. return 0;
  78. }

  

洛谷 2890 [USACO07OPEN]便宜的回文Cheapest Palindrome的更多相关文章

  1. 洛谷P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    题目链接: 点我 题目分析: 玄学\(dp\) 设\(val[s[i] - 'a' + 1]\)表示字母\(s[i]\)的花费 首先发现对于一个已经回文了的串\(s[i, j]\),在\(s[i - ...

  2. 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)

    P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...

  3. [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...

  4. [USACO07OPEN]便宜的回文Cheapest Palindrome

    字串S长M,由N个小写字母构成.欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费.        题目描述见上            显然 这是一道区间DP 从两头DP,枚举长度啥的很套 ...

  5. [luoguP2890] [USACO07OPEN]便宜的回文Cheapest Palindrome(DP)

    传送门 f[i][j] 表示区间 i 到 j 变为回文串所需最小费用 1.s[i] == s[j] f[i][j] = f[i + 1][j - 1] 2.s[i] != s[j] f[i][j] = ...

  6. 洛谷P1207 [USACO1.2]双重回文数 Dual Palindromes

    P1207 [USACO1.2]双重回文数 Dual Palindromes 291通过 462提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 ...

  7. 洛谷oj U3936(分成回文串) 邀请码:a0c9

    题目链接:传送门 题目大意:略 题目思路:DP 先预处理,分别以每个字母为中心处理能形成的回文串,再以两个字母为中心处理能形成的回文串. 然后 dp[i] 表示1~i 能形成的数目最少的回文串. 转移 ...

  8. 【洛谷4287】[SHOI2011] 双倍回文(Manacher算法经典题)

    点此看题面 大致题意: 求一个字符串中有多少个长度为偶数的回文串,它的一半也是回文串. \(Manacher\)算法 这应该是\(Manacher\)算法一道比较好的入门题,强烈建议在做这题之前先去学 ...

  9. 洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes

    P1207 [USACO1.2]双重回文数 Dual Palindromes 题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而7777 ...

随机推荐

  1. 2019-7-2-asp-dotnet-core-通过图片统计-csdn-用户访问

    title author date CreateTime categories asp dotnet core 通过图片统计 csdn 用户访问 lindexi 2019-7-2 19:21:2 +0 ...

  2. 模拟实现call、apply

    1. 知识点补充: 首先在模拟实现前,先Mark一些我之前不知道的知识: a. eval(string)函数:可计算某个字符串,并执行其中的JavaScript代码 其中,string是必需传入的待计 ...

  3. Python中死锁的形成示例及死锁情况的防止

    死锁示例搞多线程的经常会遇到死锁的问题,学习操作系统的时候会讲到死锁相关的东西,我们用Python直观的演示一下.死锁的一个原因是互斥锁.假设银行系统中,用户a试图转账100块给用户b,与此同时用户b ...

  4. 关于Cadence SPB 16.6 破解的一些关键步骤

    网上搜索到的破解方法,一般来说流程都是没有什么大问题的.较详细的一个破解流程可参照: http://www.mr-wu.cn/cadence-orcad-allegro-spb-16-6-instal ...

  5. 阿里云 Aliplayer高级功能介绍(四):直播时移

    基本介绍 时移直播基于常规的HLS视频直播,直播推流被切分成TS分片,通过HLS协议向播放用户分发,用户请求的m3u8播放文件中包含不断刷新的TS分片地址:对于常规的HLS直播而言,TS分片地址及相应 ...

  6. SpringData_01_SpringData的快速入门

    1.1SpringData JPA概述 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问 ...

  7. VS2010-MFC(对话框:创建对话框类和添加控件变量)

    转自:http://www.jizhuomi.com/software/153.html 前两讲中讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类 ...

  8. 笔试中sizeof求字节数的问题

    1. ]) { cout<<sizeof(ch)<<endl; //或者sizeof(ch)=?; } 这种情况,数组名作为形参,退化成指针,所以sizeof结果是4(32位编 ...

  9. 自定义UICollectionViewLayout(适用于多个section)

    一.自定义layout主要方法 重写系统的- (void)prepareLayout  方法: 其实就是计算每个cell的frame和其它相关属性. 二.在网上看了好多自定义的layout 但是没有多 ...

  10. 07_Hibernate多事务并发运行时并发问题检索方式

    什么是事务? 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 事务就是逻辑上的一组操作,要么全都成功,要么全都失败 ...