2481: 神奇的字符串

时间限制: 3 Sec  内存限制: 256 MB

提交: 8  解决: 3

[提交][状态][讨论版]

题目描述

输入

输出

样例输入

  1. abcb
  2. 1000 1100
  3. 350 700
  4. 200 800
  5. 2000 2000
  6. 2000 2000
  7. 2000 2000
  8. 2000 2000
  9. 2000 2000
  10. 2000 2000
  11. 2000 2000
  12. 2000 2000
  13. 2000 2000
  14. 2000 2000
  15. 2000 2000
  16. 2000 2000
  17. 2000 2000
  18. 2000 2000
  19. 2000 2000
  20. 2000 2000
  21. 2000 2000
  22. 2000 2000
  23. 2000 2000
  24. 2000 2000
  25. 2000 2000
  26. 2000 2000
  27. 2000 2000
  28.  
  29. jelly
  30. 1000 1100
  31. 350 700
  32. 200 800
  33. 2000 2000
  34. 2000 432
  35. 2000 2000
  36. 2000 2000
  37. 2000 2000
  38. 2000 2000
  39. 20 2000
  40. 2000 2000
  41. 350 35
  42. 200 800
  43. 2000 2000
  44. 2000 2000
  45. 2000 2000
  46. 2000 2000
  47. 2000 2000
  48. 2000 2000
  49. 2000 2000
  50. 2000 2000
  51. 2000 2000
  52. 2000 2000
  53. 2000 2000
  54. 15 2000
  55. 2000 2000

样例输出

  1. 900
  2. 105

提示

来源

周甄陶

————————————————————————————————————————

思路:分析可知一定是先删去前面和后面然后一端添加字符,所以先n^2处理出前后删减的花费,然后用dp数字达标维护,用dp[i][j][0]表示区间[i,j]向前扩展成回文的最小花费,用dp[i][j][1]表示区间[i,j]向后扩展成回文的最小花费

  1. #include <iostream>
  2. #include<queue>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<set>
  7. #include<cstring>
  8. using namespace std;
  9. #define LL long long
  10.  
  11. int dp[1005][1005][2];
  12. int a[30],b[30];
  13. char s[1005];
  14. int L[1005],R[1005];
  15. bool dd[1005][1005];
  16.  
  17. int main()
  18. {
  19. while(~scanf("%s",s))
  20. {
  21.  
  22. for(int i=0; i<26; i++)
  23. scanf("%d%d",&a[i],&b[i]);
  24. int n=strlen(s);
  25. memset(dd,0,sizeof dd);
  26. for(int i=1; i<=n; i++)
  27. {
  28. dd[i][i]=true;
  29. }
  30. for(int i=1; i<n; i++)
  31. {
  32. if(s[i-1]==s[i])
  33. dd[i][i+1]=true;
  34. }
  35. for(int j=2; j<n; j++)
  36. for(int i=1; i<=n; i++)
  37. {
  38. if(i+j>n)
  39. break;
  40. dd[i][i+j]=s[i-1]==s[i+j-1]&dd[i+1][i+j-1];
  41. }
  42.  
  43. for(int i=0; i<n; i++)
  44. dp[i][i][0]=0,dp[i][i][1]=0;
  45. for(int j=1; j<n; j++)
  46. {
  47. for(int i=1; i<=n; i++)
  48. {
  49. if(i+j>n) break;
  50.  
  51. if(dd[i][i+j])
  52. {
  53. dp[i][i+j][0]= dp[i][i+j][1]=0;
  54. }
  55. else
  56. {
  57. dp[i][i+j][0]=dp[i][i+j-1][0]+b[s[i+j-1]-'a'];
  58. dp[i][i+j][1]=dp[i+1][i+j][1]+b[s[i-1]-'a'];
  59. }
  60.  
  61. }
  62. }
  63. L[0]=0;
  64. L[1]=a[s[0]-'a'];
  65. for(int i=2; i<=n; i++)
  66. {
  67. L[i]=L[i-1]+a[s[i-1]-'a'];
  68. }
  69. R[n+1]=0;
  70. R[n]=a[s[n-1]-'a'];
  71. for(int i=n-1; i>0; i--)
  72. {
  73. R[i]=R[i+1]+a[s[i-1]-'a'];
  74. }
  75.  
  76. int mn=0x3f3f3f3f;
  77. for(int i=1; i<=n; i++)
  78. {
  79. for(int j=n; j>=i; j--)
  80. {
  81. mn=min(mn,L[i-1]+R[j+1]+min(dp[i][j][0],dp[i][j][1]));
  82. }
  83. }
  84. printf("%d\n",mn);
  85.  
  86. }
  87.  
  88. return 0;
  89. }

ZUFE2481 神奇的字符串 2017-05-12 16:41 39人阅读 评论(0) 收藏的更多相关文章

  1. ZUFE2480: 神奇的序列 2017-05-12 16:45 39人阅读 评论(0) 收藏

    2480: 神奇的序列 时间限制: 4 Sec  内存限制: 256 MB 提交: 31  解决: 15 [提交][状态][讨论版] 题目描述 序列a如下: a[0] = A; a[1] = B; a ...

  2. c# 发送邮件、附件 分类: C# 2014-12-17 16:41 201人阅读 评论(0) 收藏

    WinForm窗体代码如下: <span style="font-size:14px;">using System; using System.Collections. ...

  3. HRBUST1313 火影忍者之~静音 2017-03-06 16:11 39人阅读 评论(0) 收藏

    火影忍者之-静音 传说中的火之国一年一度的公务员选拔又开始了!木叶忍者村此次也要从中选拔出5人来,作为即将上任的新火影纲手的小弟-,可是报考公务员的人数实在是太--多啦!所以纲手的贴身随从-静音小姐, ...

  4. HRBUST1315 火影忍者之~大战之后 2017-03-06 16:14 54人阅读 评论(0) 收藏

    火影忍者之-大战之后 经历了大战的木叶村现在急需重建,人手又少,所以需要尽可能多的接受外来的任务,以赚取报酬,重建村庄,假设你现在是木叶的一名高级忍者,有一大堆的任务等着你来做,但毕竟个人时间有限,所 ...

  5. Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏

    Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单 ...

  6. 网上关于sort结构体排序都不完整,我来写一个完整版的 2014-08-09 16:50 60人阅读 评论(0) 收藏

    主要参考sort函数_百度文库, 但是那篇有错误 2.结构体排序,a升,b降,c降 平板视图 打印? 01 #include <iostream> 02 #include <algo ...

  7. NavBarControl控件 2015-07-23 16:56 2人阅读 评论(0) 收藏

    NavBarControl控件 1.      新建一个windows窗体应用程序项目 2.      在工具箱中的Navigation& Layout选项卡下找到NavBarControl, ...

  8. ubuntu文件管理常用命令 分类: linux ubuntu 学习笔记 2015-07-02 16:57 29人阅读 评论(0) 收藏

    1.关闭防火墙:ufw disable 2.以.开头的表示隐藏文件 3..和..分别代表当前目录以及当前目录的父目录 4.显示当前用户所在目录pwd 5.touch创建空文件 6.mkdir创建新目录 ...

  9. SQL string类型的数据按int类型排序 分类: SQL Server 2014-12-08 16:56 393人阅读 评论(0) 收藏

    说明: 我在做wms进销存软件时,发现一个问题:一张入库单(T_OutIn_BoxTop),入库扫描时要分成多箱,箱号(BoxTop_No)可以是数字也可以是字符串,所以箱号只能是字符串类型的,问题来 ...

随机推荐

  1. 改变dos的编码方式

    chcp 936 改变成 gbk chcp 65001 改成 utf-8 删除MySqlite文件 generic_x86:/data/data/com.example.lifen.sqlite/da ...

  2. iOS.C

    iOS开发中C语言的应用: 1. NS_ENUM & NS_OPTIONS http://nshipster.com/ns_enum-ns_options/

  3. 20172306《Java程序设计》第五周学习总结

    20172306 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第五章主要学习了if以及while的语句的运用 运算符:== 代表相等,是两个之间的内存地址 ...

  4. MFC窗口颜色的设置

    本文主要介绍对话框背景色以及控件颜色的设置(SetDialogBkColor()不再被支持). 对话框背景色的设置 1.重载OnPaint()函数,即WM_PAINT消息,代码如下所示: void C ...

  5. C++ 的虚析构函数

    当一个基类的指针指向一个派生类的对象,并用该基类的指针去删除或者析构派生类对象时,如果基类的析构函数不是声明为虚函数,那么在析构时基类的析构函数将会被直接调用,派生类的析构函数应为没被调用而导致内存泄 ...

  6. swift 中使用weak self

    request.responseString(encoding: NSUTF8StringEncoding) {[weak self] (res) -> Void in if let stron ...

  7. powershell上传证书

    https://www.cnblogs.com/threestone/p/4001632.html powershell上传证书

  8. 提升HTML5的性能体验系列之五 webview启动速度优化及事件顺序解析

    webview加载时有5个事件.触发顺序为loading.titleUpdate.rendering.rendered.loaded.webview开始载入页面时触发loading,载入过程中如果&l ...

  9. CXF wsdl2java (转载)

    2011-03-28 14:27 9735人阅读 评论(2) 收藏 举报 servicewebserviceinterfacejavastringserver CXF wsdl2Java 一.  简介 ...

  10. The Django Book第六章(Admin)随笔

    要使用Django自带的管理界面,首先得激活- 激活的前提首先在你的项目的seeting目录下的INSTALL_APPS必须有以下的的包 django.contrib.admin django.con ...