题目:这里

题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于

该字符串进行或不进行这项操作,而每个字符串都有一个相应的能量值,进行操作了就要消耗那么多能量值,最后是否能在消耗的能量值最小的情况下保证这些字符串是升序的(

字典序从小到大),不能就输出-1。

字符串用string,DP,dp[i][j]表示到第i个字符串的状态为j的时候(j为1表示这个串交换了,j为0表示这个串没有交换),注意的是不能形成升序的判断,并不是任意相邻的两个字符串

能够满足升序就可以了,还要考虑前面的。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<string>
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10. #define inf 0x3f3f3f3f3f3f
  11. const int M = 1e5 + ;
  12. ll v[M],dp[M][];
  13. string str[M];
  14.  
  15. string revers(string x)
  16. {
  17. string y=x;
  18. int len=x.length();
  19. for (int i= ; i<len/ ; i++)
  20. swap(y[i],y[len-i-]);
  21. return y;
  22. }
  23.  
  24. ll min(ll x,ll y) {return x<y?x:y;}
  25.  
  26. int main()
  27. {
  28. int n;
  29. scanf("%d",&n);
  30. for (int i= ; i<=n ; i++) {
  31. scanf("%I64d",&v[i]);
  32. dp[i][]=dp[i][]=inf;
  33. }
  34. for (int i= ; i<=n ; i++) cin>>str[i];
  35. dp[][]=;dp[][]=v[];
  36. bool flag1=false;int i;
  37. for (i= ; i<=n ; i++)
  38. {
  39. bool flag2=false;
  40. if (str[i]>=str[i-])
  41. dp[i][]=dp[i-][],flag2=true;
  42. if (str[i]>=revers(str[i-]))
  43. dp[i][]=min(dp[i][],dp[i-][]),flag2=true;
  44. if (revers(str[i])>=str[i-])
  45. dp[i][]=dp[i-][]+v[i],flag2=true;
  46. if (revers(str[i])>=revers(str[i-]))
  47. dp[i][]=min(dp[i][],dp[i-][]+v[i]),flag2=true;
  48. //if (!flag2) {flag1=true;break;}
  49. if(dp[i][]==inf&&dp[i][]==inf)
  50. break;
  51. }
  52. //if (flag1) puts("-1");
  53. if (i!=n+)puts("-1");
  54. else printf("%I64d\n",min(dp[n][],dp[n][]));
  55. return ;
  56. }

CodeForces 607C (DP) Hard problem的更多相关文章

  1. codeforces C. Sonya and Problem Wihtout a Legend(dp or 思维)

    题目链接:http://codeforces.com/contest/713/problem/C 题解:这题也算是挺经典的题目了,这里附上3种解法优化程度层层递进,还有这里a[i]-i<=a[i ...

  2. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  3. [codeforces 528]B. Clique Problem

    [codeforces 528]B. Clique Problem 试题描述 The clique problem is one of the most well-known NP-complete ...

  4. codeforces.com/contest/325/problem/B

    http://codeforces.com/contest/325/problem/B B. Stadium and Games time limit per test 1 second memory ...

  5. Codeforces 442B Andrey and Problem(贪婪)

    题目链接:Codeforces 442B Andrey and Problem 题目大意:Andrey有一个问题,想要朋友们为自己出一道题,如今他有n个朋友.每一个朋友想出题目的概率为pi,可是他能够 ...

  6. CodeForces 867B Save the problem

    B. Save the problem! http://codeforces.com/contest/867/problem/B time limit per test 2 seconds memor ...

  7. Codeforces 776D The Door Problem

    题目链接:http://codeforces.com/contest/776/problem/D 把每一个钥匙拆成两个点${x,x+m}$,分别表示选不选这把钥匙. 我们知道一扇门一定对应了两把钥匙. ...

  8. codeforces 803G Periodic RMQ Problem

    codeforces 803G Periodic RMQ Problem 题意 长度为\(1e5\)的数组复制\(1e4\)次,对新的数组进行区间覆盖和区间最小值查询两种操作,操作次数\(1e5\). ...

  9. [Codeforces 986E] Prince's Problem

    [题目链接] https://codeforces.com/contest/986/problem/E [算法] X到Y的路径积 , 可以转化为X到根的路径积乘Y到根的路径积 , 除以LCA到根的路径 ...

随机推荐

  1. IntelliJ IDEA热加载自动更新(Update classes and resources )

          IntelliJ IDEA默认文件是自动保存的,但是手头有个项目jsp文件改动后,在tomcat中不能立即响应变化.想要jsp文件改动后立刻看到变化,可以通过修改配置来实现.       ...

  2. C++常见gcc编译链接错误解决方法

    除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词): 用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdy ...

  3. 泛型、Linq 查询使用

    查询类对象数组中符合条件的一个实例对象 泛型自带查询方法: EntityErpFldMx ms = aryFldMx.Where(i => i.Jhd == "4900120121&q ...

  4. IOS中图片拉伸技巧与方法总结(转载)

    以下内容转载自:http://my.oschina.net/u/2340880/blog/403996 IOS中图片拉伸技巧与方法总结 一.了解几个图像拉伸的函数和方法 1.直接拉伸法 简单暴力,却是 ...

  5. 适合最新版docker自定义启动配置

    docker不断发布新版本,以前默认的在 /etc/default/docker里修改,但是新版已经不推荐了 注意: 一些文章推荐在 /lib/systemd/system/docker.servic ...

  6. JAVA为什么要配置环境变量,怎样配置

    自己总结些再加抄点:安装JDK后要配置环境变量,主要有三个:1 JAVA_HOME ->为JDK的安装目录,如:F:\JAVA\jdk1.6.0_042 CLASSPATH ->到哪里找需 ...

  7. RNG vs EDG | SKT vs KTB [20160826]

    G1 RNG:丽桑卓,古拉加斯,强行开团流. EDG:崔斯特,普朗克,伊莉斯游走,全球支援流,小规模团战能以多打少. G2 RNG:塔莉垭,纳尔,烬. EDG:雷克塞,艾克,劫,冲击后排. G3 RN ...

  8. Redirecting Console.WriteLine() to Textbox

    I'm building this application in Visual Studio 2010 using C#. Basically there are 2 files, form1.cs ...

  9. 最牛B的编码套路

    最近,我大量阅读了Steve Yegge的文章.其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已:   与你所相信的恰恰相反,单纯地每天埋头 ...

  10. 关于ILDASM.EXE的知识整理

    因为现在用的VS2010,发现,这个工具自己就带着ILDASM.EXE这个反编译工具 具体的查找方式为: C:\Program Files\Microsoft SDKS\Windows\V7.0\bi ...