CodeForces 706C Hard problem
简单$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的更多相关文章
- Codeforces 706C - Hard problem - [DP]
题目链接:https://codeforces.com/problemset/problem/706/C 题意: 给出 $n$ 个字符串,对于第 $i$ 个字符串,你可以选择花费 $c_i$ 来将它整 ...
- 【动态规划】Codeforces 706C Hard problem
题目链接: http://codeforces.com/contest/706/problem/C 题目大意: n(2 ≤ n ≤ 100 000)个字符串(长度不超过100000),翻转费用为Ci( ...
- 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 ...
- CodeForces 706C Hard problem (水DP)
题意:对于给定的n个字符串,可以花费a[i] 将其倒序,问是否可以将其排成从大到小的字典序,且花费最小是多少. 析:很明显的水DP,如果不是水DP,我也不会做.... 这个就要二维,d[2][max ...
- CodeForces - 706C Hard problem(dp+字符串)
题意:有n个字符串,只能将其逆转,不能交换位置,且已知逆转某字符串需要消耗的能量,问将这n个字符串按字典序从小到大排序所需消耗的最少能量. 分析:每个字符串要么逆转,要么不逆转,相邻两个字符串进行比较 ...
- codeforces 340C Tourist Problem
link:http://codeforces.com/problemset/problem/340/C 开始一点也没思路,赛后看别人写的代码那么短,可是不知道怎么推出来的啊! 后来明白了. 首先考虑第 ...
- codeforces B. Routine Problem 解题报告
题目链接:http://codeforces.com/problemset/problem/337/B 看到这个题目,觉得特别有意思,因为有熟悉的图片(看过的一部电影).接着让我很意外的是,在纸上比划 ...
- Codeforces 527D Clique Problem
http://codeforces.com/problemset/problem/527/D 题意:给出一些点的xi和wi,当|xi−xj|≥wi+wj的时候,两点间存在一条边,找出一个最大的集合,集 ...
- Codeforces 1096D - Easy Problem - [DP]
题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...
随机推荐
- 记录在IIS中安装部署Orchard遇到的问题
本机环境:Windows 8.1 + IIS8.5 + VS2013+SQLServer2012 首先是从官网直接下载Orchard.Web 1.7.2版的安装包,在本机IIS上部署,按官方文档一步步 ...
- jquery 分页控件1
jquery 分页控件(一) 以前一直都是用别人的分页控件,虽然用得很爽,但总觉的还是自己写个小插件比较好,这个插件效果.代码等都有参照别人完成的控件.即便功能并不是那么完善,扩展性也不好,bug或许 ...
- WPF专业编程指南 - DispatcherUnhandledException
WPF的Application类中有一个事件:DispatcherUnhandledException,在应用程序未对其中的异常加以处理的情况下发生,从而为应用程序把好最后的大门 namespace ...
- Matlab内置函数
[原创]Matlab.NET混编技巧之——找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破脑袋, ...
- 启动tomcat报host-manager does not exist or is not a readable directory异常
新安装了一个tomcat6,安装完之后在webapps下面会有一些tomcat自带的项目(ROOT.manager.host-manager...) 把这些没用的项目删掉之后,启动tomcat 报如下 ...
- Jquery 类似新浪微博,鼠标移到头像,用浮动窗口显示用户信息,已做成一个jquery插件
请注意!!!!! 该插件demo PHP 的 demo下载 C#.NET的demo下载 需要如下图, 1.鼠标移动到头像DIV时,Ajax获取数据,并让浮动DIV显示出来. 2.鼠标可以移动到上面浮 ...
- spring.net AOP通知类型
上篇介绍了spring.net AOP的基本实现,其中有说到通知类型,首先在这里补充解释一下.最后出一个异常通知的实例,因为他的实现和别的通知有些不一样. 1.拦截环绕通知:在Spring中最基础的通 ...
- Mathematics for Computer Graphics
Mathematics for Computer Graphics 最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=105 ...
- [置顶] Oracle学习路线与方法
还没有整理好.... 1.学习路线 Oracle官方文档:2 Day DBA-->2 Day+Performance Tuning Guide--->Administrator's Gui ...
- 开源 免费 java CMS - FreeCMS1.4-功能说明-站点管理
下载地址:http://code.google.com/p/freecms/ 站点管理 FreeCMS支持网站群模式,并支持无限树级管理. 1. 添加一级站点 从左侧管理菜单点击站点管理进入. 提示 ...