题目大意:
  有10个格子,初始状态a和b分别在5和6上。
  现在有n个任务,每个任务都有特定的位置。
  在每个单位时间,a和b可以分别进行以下事件中的任意一件:
    1.向左(右)移动一个格子;
    2.锁定在当前格子执行任务。
    (a和b不能同时执行任务,且同一时刻a必须严格在b左边)。
  问完成所有任务的最小时间。

思路:
  动态规划。
  f[i][j][k]表示完成第i个任务后,a在j且b在k时所经过的最少时间。
  设当前任务为p,当前待转移的状态为f[i][p]或f[p][i],枚举完成上一个任务后a和b所在的位置j和l,并加上分别从j,l移动到p,i或i,p的最大时间。
  数据格式有点问题,要手动判断换行符和空行。

 #include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
const int inf=0x40000000;
const int N=,M=;
char s[N];
int f[N][M][M];
bool get(char s[]) {
char ch;
int n=;
while(!isdigit(ch=getchar())) {
if(!~ch) return false;
if(ch=='\n') {
s[n]='\0';
return true;
}
}
s[n++]=ch;
while(isdigit(ch=getchar())) {
s[n++]=ch;
}
s[n]='\0';
while(ch!='\n') ch=getchar();
return true;
}
int main() {
while(get(s)) {
int n=strlen(s);
if(!n) {
puts("");
continue;
}
std::fill(&f[][][],&f[n][M-][M],inf);
f[][][]=;
for(register int k=;k<=n;k++) {
int p=s[k-]-'';
if(!p) p=;
for(register int i=;i<p;i++) {
for(register int j=;j<M;j++) {
for(register int l=j+;l<M;l++) {
f[k][i][p]=std::min(f[k][i][p],f[k-][j][l]+std::max(std::abs(i-j),std::abs(p-l)+));
}
}
}
for(register int i=p+;i<M;i++) {
for(register int j=;j<M;j++) {
for(register int l=j+;l<M;l++) {
f[k][p][i]=std::min(f[k][p][i],f[k-][j][l]+std::max(std::abs(p-j)+,std::abs(i-l)));
}
}
}
}
int ans=inf;
for(register int i=;i<M;i++) {
for(register int j=;j<M;j++) {
ans=std::min(ans,f[n][i][j]);
}
}
printf("%d\n",ans);
}
return ;
}

[SimpleOJ229]隧道的更多相关文章

  1. SSH隧道应用, 突破网络限制

    文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...

  2. 前端学HTTP之网关、隧道和中继

    前面的话 Web是一种强大的内容发布工具.人们已经从只在网上发送静态的在线文档,发展到共享更复杂的资源,比如数据库内容或动态生成的HTML页面.Web浏览器为用户提供了一种统一的方式来访问因特网上的内 ...

  3. ngrok反向隧道--获取内网IP

    ngrok反向隧道 前情提要:小明与小白各有一台主机,两台主机在同一内网,小明想直接通过内网ssh到小白的主机上.但是小白的ip地址会不断的变化,而小明不想每次都要麻烦小白查看ip.于是小明催生了一个 ...

  4. SSH正反向隧道

    正向隧道 拓扑如下: 说明: CLIENT不能直接访问WEB服务器,AGENT可访问WEB服务器: 在AGENT上通过创建ssh正向隧道,使CLIENT可以通过AGENT间接访问WEB服务器: AGE ...

  5. Windows下使用Xshell建立反向隧道

    反向隧道是一个进行内网穿透的简单而有用的方法.在Linux下通过OpenSSH和AutoSSH可以很容易地建立稳定的反向隧道.但是在Windows下,还能看到有人特意装个Cygwin来运行这些工具…… ...

  6. WPF的路由事件、冒泡事件、隧道事件(预览事件)

    本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所 ...

  7. XSHELL使用隧道

    线上系统中,搭建了一个elasticsearch环境,想要访问页面,发现环境的内网中没有windows机器,无法使用浏览器来直接进行web页面的访问,于是直接使用了XSELL中强大的功能"隧 ...

  8. HTTP权威协议笔记-7.集成点:网关、隧道及中继

    .8.1 网关 定义:网关类似与翻译器,它抽象出了一种能够到达资源的方法. 实用:网关可以自动将HTTP流量转换为其他协议,这样使用HTTP协议的一方就不需要了解其他协议,也可实现与其他程序或设备交互 ...

  9. Android终端配置isatap隧道使用IPV6的方法

    使用isatap隧道可以在手机有IPV4网络的情况下访问IPv6网络资源.关于isatap隧道的配置方法,清华.上交两所学校都给出了相应的在windows xp/2003,windows 2000,以 ...

随机推荐

  1. for-of循环和for-in循环的区别

    基本上for in用于大部分常见的由key-value对构成的对象上以遍历对象内容. 但是for in在遍历数组对象时并不方便,这时候用for of会很方便.

  2. Ubuntu下 git 服务器的搭建【转】

    转自:http://www.open-open.com/lib/view/open1391477731082.html 搭建git服务器的4个步骤 1   配置服务器前的准备工作 首先ubuntu系统 ...

  3. [NOI2007]货币兑换 「CDQ分治实现斜率优化」

    首先每次买卖一定是在某天 $k$ 以当时的最大收入买入,再到第 $i$ 天卖出,那么易得方程: $$f_i = \max \{\frac{A_iRate_kf_k}{A_kRate_k + B_k} ...

  4. springquartz的LocalDataSourceJobStore

    spring 为quartz 提供了一个 继承 JobStoreCMT的 LocalDataSourceJobStore,主要是为了和spring更好的集成. public class LocalDa ...

  5. eclipse各种报错

    1.控制台报这个错是由于tomcat的session缓存的问题; org.apache.catalina.session.StandardManager doLoad 造成原因:上次未正确关闭tomc ...

  6. HDU 4597 Play Game(区间DP(记忆化搜索))

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 题目大意: 有两行卡片,每个卡片都有各自的权值. 两个人轮流取卡片,每次只能从任一行的左端或右端 ...

  7. HDU 1669 Jamie's Contact Groups(多重匹配+二分枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 题目大意: 给你各个人可以属于的组,把这些人分组,使这些组中人数最多的组人数最少,并输出这个人数 ...

  8. C++之可调用对象

    C++中的可调用对象分为以下几种: 函数 函数指针 lambda表达式 bind创建的对象 重载了函数调用运算符(即“()”)的类 函数.函数指针不再介绍.lambda表达式与bind创建的类参考—— ...

  9. 我常用的 Python 调试工具 - 博客 - 伯乐在线

    .ckrating_highly_rated {background-color:#FFFFCC !important;} .ckrating_poorly_rated {opacity:0.6;fi ...

  10. 【BZOJ】1016: [JSOI2008]最小生成树计数

    题解 考虑kruskal 我们都是从边权最小的边开始取,然后连在一起 那我们选出边权最小的一堆边,然后这个图就分成了很多联通块,把每个联通块内部用矩阵树定理算一下生成树个数,再把联通块缩成一个大点,重 ...