博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces 706C Hard problem
阅读量:5250 次
发布时间:2019-06-14

本文共 1315 字,大约阅读时间需要 4 分钟。

题意:给你很多字符串,每个字符串可以翻转,翻转有价值,让你求满足递增的字符串,如果不行就-1

思路:要么选,要么不选,线性dp

代码:

#include 
using namespace std;const int maxn=1e5+7;const long long INF=0x3f3f3f3f3f3f3f3fLL;string str[maxn][2];int n,a[maxn];long long dp[maxn][2];string revers(string s){ string res=s; int i,len=res.length(); for(i=0;i
>str[i][0]; str[i][1]=revers(str[i][0]); } memset(dp,INF,sizeof(dp)); dp[1][0]=0;dp[1][1]=a[1]; bool ok=true; for(int i=2;i<=n;i++){ if(str[i][0]>=str[i-1][0]){ dp[i][0]=min(dp[i][0],dp[i-1][0]);// printf("test1\n"); } if(str[i][0]>=str[i-1][1]){ dp[i][0]=min(dp[i][0],dp[i-1][1]);// printf("test2\n"); } if(str[i][1]>=str[i-1][0]){ dp[i][1]=min(dp[i][1],dp[i-1][0]+a[i]);// printf("test3\n"); } if(str[i][1]>=str[i-1][1]){ dp[i][1]=min(dp[i][1],dp[i-1][1]+a[i]);// printf("test4\n"); } if(dp[i][0]==INF&&dp[i][1]==INF){ ok=false; break; } }// for(int i=1;i<=n;i++){// printf("%d == %lld %lld\n",i,dp[i][0],dp[i][1]);// } if(!ok)puts("-1"); else printf("%I64d\n",min(dp[n][0],dp[n][1])); return 0;}

 

转载于:https://www.cnblogs.com/lalalatianlalu/p/8455943.html

你可能感兴趣的文章
c语法拾遗-函数参数的传递问题(指针的指针)
查看>>
hdu--2570--迷瘴(贪心)
查看>>
hdoj-1017-A Mathematical Curiosity(格式坑)
查看>>
解决CentOS7 Local time比实际时间相差8小时
查看>>
2018/07/05 html基础
查看>>
学习使用Bing Maps Silverlight Control(七):自定义导航工具栏
查看>>
2015 9月2日 工作计划与执行
查看>>
[转][c#]注册表经验集
查看>>
20145206、20145325、20145326、20145311团队第一周博客
查看>>
第三节 实现页面布局
查看>>
StarUML2 建模工具全平台破解及license验证简要分析
查看>>
App列表之分组ListView
查看>>
javascript数组元素的添加、删除与插入以及参数数组的使用
查看>>
css ie6最小高度问题
查看>>
1、Linux内核的配置和编译
查看>>
A Summaryof JDBC
查看>>
LRTHW笔记七
查看>>
Catch That Cow(BFS广搜)
查看>>
pip 安装问题
查看>>
大数据量处理
查看>>