[SimpleOJ229]隧道
题目大意:
有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]隧道的更多相关文章
- SSH隧道应用, 突破网络限制
文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...
- 前端学HTTP之网关、隧道和中继
前面的话 Web是一种强大的内容发布工具.人们已经从只在网上发送静态的在线文档,发展到共享更复杂的资源,比如数据库内容或动态生成的HTML页面.Web浏览器为用户提供了一种统一的方式来访问因特网上的内 ...
- ngrok反向隧道--获取内网IP
ngrok反向隧道 前情提要:小明与小白各有一台主机,两台主机在同一内网,小明想直接通过内网ssh到小白的主机上.但是小白的ip地址会不断的变化,而小明不想每次都要麻烦小白查看ip.于是小明催生了一个 ...
- SSH正反向隧道
正向隧道 拓扑如下: 说明: CLIENT不能直接访问WEB服务器,AGENT可访问WEB服务器: 在AGENT上通过创建ssh正向隧道,使CLIENT可以通过AGENT间接访问WEB服务器: AGE ...
- Windows下使用Xshell建立反向隧道
反向隧道是一个进行内网穿透的简单而有用的方法.在Linux下通过OpenSSH和AutoSSH可以很容易地建立稳定的反向隧道.但是在Windows下,还能看到有人特意装个Cygwin来运行这些工具…… ...
- WPF的路由事件、冒泡事件、隧道事件(预览事件)
本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所 ...
- XSHELL使用隧道
线上系统中,搭建了一个elasticsearch环境,想要访问页面,发现环境的内网中没有windows机器,无法使用浏览器来直接进行web页面的访问,于是直接使用了XSELL中强大的功能"隧 ...
- HTTP权威协议笔记-7.集成点:网关、隧道及中继
.8.1 网关 定义:网关类似与翻译器,它抽象出了一种能够到达资源的方法. 实用:网关可以自动将HTTP流量转换为其他协议,这样使用HTTP协议的一方就不需要了解其他协议,也可实现与其他程序或设备交互 ...
- Android终端配置isatap隧道使用IPV6的方法
使用isatap隧道可以在手机有IPV4网络的情况下访问IPv6网络资源.关于isatap隧道的配置方法,清华.上交两所学校都给出了相应的在windows xp/2003,windows 2000,以 ...
随机推荐
- MFC将二进制文件导入资源后释放
1.前言 前一篇笔记记录了怎么修改PE,此篇记录下如何利用自身的资源文件. 2.编程思路 获得资源句柄 - 获得资源文件大小 - 加载资源文件 - 锁定资源并获得其指针. 3.实践代码 1)编译以下代 ...
- go 函数举例练习
1. 求1到100之内的所有质数,并打印到屏幕上 package main import "fmt" // 求1-100 内的质数 func justfy(i int) bool ...
- select()函数用法一
select()函数用法以及FD_ZERO.FD_SET.FD_CLR.FD_ISSET select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用 ...
- -bash: /bin/rm: Argument list too long的解决办法【转】
当目录下文件太多时,用rm删除文件会报错: -bash: /bin/rm: Argument list too long 提示文件数目太多. 解决的办法是使用如下命令: ls | xargs -n 1 ...
- 虚拟环境pipenv的使用
安装虚拟环境 安装python3.6 python -m site --user-base 找到 用户基础目录 指定python版本的方式 pipenv --python 3.8 安装 用户范围内安装 ...
- sql的主键,int类型,自增,自动编号到了规定最大数,接下来数据库会怎么做
答案:它会从1开始重新编号,但是避开已经重复的值.
- ubuntu 16.04 网卡配置 虚拟机上网
看所有网卡(包括未启动的) ifconfig -a 或者 ip link 查看当前网卡配置,打开配置文件/etc/network/interfaces 设置静态IP(dhcp 为动态获取,static ...
- 两行代码搞定js对象深浅拷贝
有一段时间没有更新博客了,忙于工作.2018年刚过去,今天来开启2018第一篇博文.好了,咱们步入正题. 先上代码 /** * 遍历对象 * 1.判断是不是原始值 * 2.判断是数组还是对象 * 3. ...
- 使用JS实现文字搬运工
使用JS实现文字搬运工 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html><head><meta http-equiv=&quo ...
- opencv(2)绘图
绘制直线 函数为:cv2.line(img,Point pt1,Point pt2,color,thickness=1,line_type=8 shift=0) 有值的代表有默认值,不用给也行.可以看 ...