问题 B: [NOIP-P1125]飙车
题目描述
已知公路总长L米,一共有K个赛道,你的赛车总是和公路上其他的普通的车走相反的方向,并且所有的车每秒沿赛道行驶1m(具体看图)(宇宙新秀:我的Evo IV怎么这么烂….).
问题是:跑到终点最少撞多少次车?
我们简化一下模型,画一个(L+1)*K的网格,设所有的车都是点,并且每秒末都会出现在这个网格的某个顶点上.公路上其他的车都以固定的1m/s的速度自上而下行驶,而你的跑车自下而上行驶,并且每秒可以从一个点行驶到它上方\左上方\右上方的点(假设飘移不浪费时间,具体请看图).
我们假设,撞车不会使车损坏,不会使车减速(宇宙新秀:我的Evo IV怎么这么强~~)
对于撞车的设定:当每秒末你的车和另外一辆车处在同一点上时,算撞车;你的车和另一辆车迎面开过来,算撞车.具体请看下图:
假设一开始你可以选择任意一个赛道开始比赛,要求你写一个程序,计算到达终点至少要撞多少次车。
对于上边的例子,只要开始选择第三赛道开始跑,然后一路向北,就可以不撞车而到达终点。
输入
首行两个数,L,K,表示赛道距离,以及有几个赛道.
接下来L行,每行K个字符,第i行第j个字符表示公路距终点距离为i-1的第j个赛道的初始状态:0表示该点没有车,1表示该点有车.
铭记一点:初始时你的车在第L+1行,你可以指定一个第L+1行的位置为你的车的初始位置,而第L+1行是不在输入文件里的.
输出
一个数ans,表示最少撞车次数
样例输入
6 4 1111 1111 1111 0000 1111 0000
样例输出
3
提示
初始 第一秒 第二秒 第三秒
距终点0m 1111
距终点1m 1111 1111
距终点2m 1111 1111 1111
距终点3m 0000 1111 1111 1P11
距终点4m 1111 0000 P111 1111
距终点5m 0000 P111 0000 1111
距终点6m C
C代表该点只有你的车,P代表该点既有你的车又有其他的车.最优方案为第一秒直走,与一辆车相撞,第二秒直走,又与一辆车相撞,第三秒斜向右走,又与一辆车相撞,总共三次.如果第三秒直走,将与两辆车相撞,那么就撞了四次,所以三次最优.
1<=n<=100,1<=k<=10,此题中出现的所有数字均为整数
代码
#pragma GCC optimize(1) #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #include<bits/stdc++.h> #define rep(i,j,k) for(register int i=(j);i<=(k);++i) #define per(i,j,k) for(register int i=(j);i>=(k);--i) using namespace std; template<class T> inline void read(T &x) { x=0; register char c=getchar(); register bool f=0; while(!isdigit(c))f^=c=='-',c=getchar(); while(isdigit(c))x=x*10+c-'0',c=getchar(); if(f)x=-x; } const int N=101; const int K=11; int f[N][K],a[N][K],n,k,ans=2147483647; char s; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin>>n>>k; per(i,n,1) rep(j,1,k) { cin>>s; a[i][j]=s-48; f[i][j]=0x3f3f3f3f; } for(register int i=2;i<=n;i+=2) rep(j,1,k) { f[i][j]=min(f[i][j],f[i-2][j]+a[i][j]+a[i-1][j]); if(j<k) f[i][j]=min(f[i][j],f[i-2][j+1]+a[i][j]); if(j>1) f[i][j]=min(f[i][j],f[i-2][j-1]+a[i][j]); } rep(i,1,k) ans=min(ans,f[n][i]); printf("%d\n",ans); return 0; }
原文地址:https://www.cnblogs.com/LJA001162/p/12725004.html
- 移动端页面按手机屏幕分辨率自动缩放的js
- PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获--补充
- es 5 数组reduce方法记忆
- CSS3与动画有关的属性transition、animation、transform对比
- 总结CSS3新特性(Transiton篇)
- 【实战】MS14-068域权限提升漏洞总结
- 总结CSS3新特性(Transform篇)
- Python 黑帽编程 4.2 Sniffer之数据本地存储和加载
- 老司机教你下载tumblr上视频和图片的正确姿势
- 总结CSS3新特性(媒体查询篇)
- 总结CSS3新特性(选择器篇)
- python无线网络安全入门案例【翻译】
- 总结CSS3新特性(颜色篇)
- RedTigers Hackit SQL 注入题解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux系统——keepalived高可用集群服务
- python第四十五课——继承性之多继承
- HTTP服务器Nginx服务介绍续
- python第四十六课——函数重写
- Linux系统Memcached服务介绍
- python第四十七课——类属性和函数属性
- python第四十八课——类函数和对象函数
- python第四十九课——对象序列化与反序列化
- python第五十课——多态性
- python第五十一课——__slots
- Linux系统安全配置iptables服务介绍
- ThreadLocal企业中真实应用
- python第五十二课--自定义异常类
- python第五十三课——time模块
- 从亲身经历谈谈如何用Git分支解决项目生产实践中的痛点