简单$dp$。

$dp[i][0]$:第$i$个串放置完毕,并且第$i$个串不反转,前$i$个串字典序呈非递减的状态下的最小费用。

$dp[i][1]$:第$i$个串放置完毕,并且第$i$个串反转,前$i$个串字典序呈非递减的状态下的最小费用。

那么可以得到以下递推式:

如果$s[i] > s[i - 1]$,$dp\left[ i \right]\left[ 0 \right] = min(dp\left[ i \right]\left[ 0 \right],dp\left[ {i - 1} \right][0])$;

如果$s[i] > s{[i - 1]_{reverse}}$,$dp\left[ i \right]\left[ 0 \right] = min(dp\left[ i \right]\left[ 0 \right],dp\left[ {i - 1} \right][1])$;

如果$s{[i]_{reverse}} > s[i - 1]$,$dp\left[ i \right]\left[ {1\left] { = min(dp} \right[i} \right]\left[ {1\left] {,dp} \right[i - 1} \right]\left[ 0 \right] + c\left[ i \right])$;

如果$s{[i]_{reverse}} > s{[i - 1]_{reverse}}$,$dp\left[ i \right]\left[ {1\left] { = min(dp} \right[i} \right]\left[ {1\left] {,dp} \right[i - 1} \right]\left[ 1 \right] + c\left[ i \right])$;

初始化的时候,令$dp[i][j]=INF$。如果$dp[n][0]$和$dp[n][1]$都是$INF$,那么输出$-1$,否则输出$min(dp[n][0],dp[n][1])$。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
} const LL INF=1e17;
const int maxn=;
char s[maxn],t[maxn];
LL dp[maxn][],c[maxn];
int n; void res()
{
int len=strlen(s);
for(int i=;i<len/;i++) swap(s[i],s[len-i-]);
} void ret()
{
int len=strlen(t);
for(int i=;i<len/;i++) swap(t[i],t[len-i-]);
} int main()
{
scanf("%d",&n); memset(s,,sizeof s); memset(t,,sizeof t);
for(int i=;i<=n;i++) scanf("%lld",&c[i]);
for(int i=;i<=n;i++) dp[i][]=dp[i][]=INF;
scanf("%s",s); dp[][]=; dp[][]=c[];
for(int i=;i<=n;i++)
{
strcpy(t,s); scanf("%s",s); if(strcmp(s,t)>=) dp[i][]=min(dp[i][],dp[i-][]);
ret(); if(strcmp(s,t)>=) dp[i][]=min(dp[i][],dp[i-][]); ret(); res(); if(strcmp(s,t)>=) dp[i][]=min(dp[i][],dp[i-][]+c[i]);
ret(); if(strcmp(s,t)>=) dp[i][]=min(dp[i][],dp[i-][]+c[i]); res(); ret();
}
LL ans=min(dp[n][],dp[n][]);
if(ans==INF) printf("-1\n");
else printf("%lld\n",ans);
return ;
}

CodeForces 706C Hard problem的更多相关文章

  1. Codeforces 706C - Hard problem - [DP]

    题目链接:https://codeforces.com/problemset/problem/706/C 题意: 给出 $n$ 个字符串,对于第 $i$ 个字符串,你可以选择花费 $c_i$ 来将它整 ...

  2. 【动态规划】Codeforces 706C Hard problem

    题目链接: http://codeforces.com/contest/706/problem/C 题目大意: n(2 ≤ n ≤ 100 000)个字符串(长度不超过100000),翻转费用为Ci( ...

  3. Codeforces 706C Hard problem 2016-09-28 19:47 90人阅读 评论(0) 收藏

    C. Hard problem time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  4. CodeForces 706C Hard problem (水DP)

    题意:对于给定的n个字符串,可以花费a[i]  将其倒序,问是否可以将其排成从大到小的字典序,且花费最小是多少. 析:很明显的水DP,如果不是水DP,我也不会做.... 这个就要二维,d[2][max ...

  5. CodeForces - 706C Hard problem(dp+字符串)

    题意:有n个字符串,只能将其逆转,不能交换位置,且已知逆转某字符串需要消耗的能量,问将这n个字符串按字典序从小到大排序所需消耗的最少能量. 分析:每个字符串要么逆转,要么不逆转,相邻两个字符串进行比较 ...

  6. codeforces 340C Tourist Problem

    link:http://codeforces.com/problemset/problem/340/C 开始一点也没思路,赛后看别人写的代码那么短,可是不知道怎么推出来的啊! 后来明白了. 首先考虑第 ...

  7. codeforces B. Routine Problem 解题报告

    题目链接:http://codeforces.com/problemset/problem/337/B 看到这个题目,觉得特别有意思,因为有熟悉的图片(看过的一部电影).接着让我很意外的是,在纸上比划 ...

  8. Codeforces 527D Clique Problem

    http://codeforces.com/problemset/problem/527/D 题意:给出一些点的xi和wi,当|xi−xj|≥wi+wj的时候,两点间存在一条边,找出一个最大的集合,集 ...

  9. Codeforces 1096D - Easy Problem - [DP]

    题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...

随机推荐

  1. 记录在IIS中安装部署Orchard遇到的问题

    本机环境:Windows 8.1 + IIS8.5 + VS2013+SQLServer2012 首先是从官网直接下载Orchard.Web 1.7.2版的安装包,在本机IIS上部署,按官方文档一步步 ...

  2. jquery 分页控件1

    jquery 分页控件(一) 以前一直都是用别人的分页控件,虽然用得很爽,但总觉的还是自己写个小插件比较好,这个插件效果.代码等都有参照别人完成的控件.即便功能并不是那么完善,扩展性也不好,bug或许 ...

  3. WPF专业编程指南 - DispatcherUnhandledException

    WPF的Application类中有一个事件:DispatcherUnhandledException,在应用程序未对其中的异常加以处理的情况下发生,从而为应用程序把好最后的大门 namespace ...

  4. Matlab内置函数

    [原创]Matlab.NET混编技巧之——找出Matlab内置函数   Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破脑袋, ...

  5. 启动tomcat报host-manager does not exist or is not a readable directory异常

    新安装了一个tomcat6,安装完之后在webapps下面会有一些tomcat自带的项目(ROOT.manager.host-manager...) 把这些没用的项目删掉之后,启动tomcat 报如下 ...

  6. Jquery 类似新浪微博,鼠标移到头像,用浮动窗口显示用户信息,已做成一个jquery插件

    请注意!!!!! 该插件demo PHP 的 demo下载  C#.NET的demo下载 需要如下图, 1.鼠标移动到头像DIV时,Ajax获取数据,并让浮动DIV显示出来. 2.鼠标可以移动到上面浮 ...

  7. spring.net AOP通知类型

    上篇介绍了spring.net AOP的基本实现,其中有说到通知类型,首先在这里补充解释一下.最后出一个异常通知的实例,因为他的实现和别的通知有些不一样. 1.拦截环绕通知:在Spring中最基础的通 ...

  8. Mathematics for Computer Graphics

    Mathematics for Computer Graphics 最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=105 ...

  9. [置顶] Oracle学习路线与方法

    还没有整理好.... 1.学习路线 Oracle官方文档:2 Day DBA-->2 Day+Performance Tuning Guide--->Administrator's Gui ...

  10. 开源 免费 java CMS - FreeCMS1.4-功能说明-站点管理

    下载地址:http://code.google.com/p/freecms/ 站点管理 FreeCMS支持网站群模式,并支持无限树级管理. 1.  添加一级站点 从左侧管理菜单点击站点管理进入. 提示 ...