G - 跑跑卡丁车
加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通行驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(同时能量清0).加速卡最多可以储存2个,也就是说当你有2个加速卡而能量再次集满,那么能量清零但得不到加速卡。一个加速卡只能维持一段赛道,游戏开始时没有加速卡。
问题是,跑完n圈最少用时为多少?
Input每组输入数据有3行,第一行有2个整数L(0<L<100),N(0<N<100)分别表示一圈赛道分为L段和有N圈赛道,接下来两行分别有L个整数Ai和Bi
(Ai > Bi).
Output对于每组输入数据,输出一个整数表示最少的用时.
Sample Input
18 1
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 8 8
Sample Output
145 对于sample这组数据,你可以先在普通情况下行驶前14段,这时你有2个加速卡以及80%的能量(N2O).在第15和16段用掉2个加速卡,通过第
17段赛道后又可以得到一个加速卡,在第18段赛道使用.
因为N很小,所以我们可以把跑N圈变为跑一圈N*L的就可以;我们可以把能量格看做1~14;有四种情况:(假设能量格用j表示)
① j=0时,只有一种情况也就是上一段有5个能量格,然后用掉了。
② j<10时,有两种情况;第一:是上一个状态正常跑到当前状态;第二:就是在上一个状态消耗一张加速卡跑到当前状态。
③ j=10时,有两种情况;第一:是上一个状态正常跑到当前状态;第二:就是上一段j为14在正常跑然后能量条清空,所以j由14变为10;
④ j>10时,只能由上一段正常跑过来;.
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
int dp[11000][20];
int main()
{
int n,m,a[11000],b[11000];
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
{//N很小,所以我们可以把跑N圈变为跑一圈N*L
scanf("%d",&a[i]);
for(int j=n;j<=n*m;j=j+n)
a[i+j]=a[i];
}
for(int i=1; i<=n; i++)
{
scanf("%d",&b[i]);
for(int j=n; j<=m*n; j=j+n)
b[j+i]=b[i];
}
memset(dp,inf,sizeof(dp));
dp[0][0]=0;
for(int i=1;i<=n*m;i++)
{
for(int j=0;j<=14;j++)
{
if(j==0)//只有一种情况,上一段有5的气然后用掉了
dp[i][j]=dp[i-1][j+5]+b[i];
else if(j<10)//有两种情况,1,由上一段直接跑过来,2,由上一段消耗一张加速卡跑过来;
dp[i][j]=min(dp[i-1][j-1]+a[i],dp[i-1][j+5]+b[i]);
else if(j==10)//有两种情况,1,由上一段直接跑过来,2,由上一段的14+1变成10跑过来;
dp[i][j]=min(dp[i-1][j-1]+a[i],dp[i-1][14]+a[i]);
else if(j>10)//只有一种情况,由上一段路直接跑过来;
dp[i][j]=dp[i-1][j-1]+a[i];
}
}
int minn=inf;
for(int i=0;i<=14;i++)
minn=min(minn,dp[n*m][i]); //表示经过n*m段赛道,剩余i个能量,所用的最短时间
printf("%d\n",minn);
}
}
G - 跑跑卡丁车的更多相关文章
- Storyboards Tutorial 03
这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...
- 文件图标SVG
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...
- [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...
- CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update.... yum install 或者 添加y ...
- Linux deepin 下sublimes配置g++ openGL
参考 :http://blog.csdn.net/u010129448/article/details/47754623 ubuntu 下gnome只要将代码中deepin-terminal改为gno ...
- [翻译svg教程]svg 中的g元素
svg 中的<g>元素用来组织svg元素.如果一组svg元素被g元素包裹了,你可以通过对g元素进行变换(transform),被g元素包裹的元素也将被变换,就好这些被svg包裹的元素是一个 ...
- 软件工程:黄金G点小游戏1.0
我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...
- 2016huasacm暑假集训训练五 G - 湫湫系列故事——减肥记I
题目链接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/G 这是一个01背包的模板题 AC代码: #include<stdio.h&g ...
- 毫秒级的时间处理上G的图片(生成缩略图)
测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...
随机推荐
- Mirai框架qq机器人教程 新版
Mirai框架qq机器人教程 新版 前言 资料列表 1.准备 i. 配置java环境 ii. 配置IDE iii. 下载mirai-console-loader(mcl)作为启动器 2.创建mirai ...
- 【MyBatis】自定义 MyBatis
自定义 MyBatis 文章源码 执行查询信息的分析 我们知道,MyBatis 在使用代理 DAO 的方式实现增删改查时只做两件事: 创建代理对象 在代理对象中调用 selectList() 配置信息 ...
- 十二:SQL注入之简要注入
SQL注入漏洞将是重点漏洞,分为数据库类型,提交方法,数据类型等方式.此类漏洞是WEB漏洞中的核心漏洞,学习如何的利用,挖掘,和修复是重要的. SQL注入的危害 SQL注入的原理 可控变量,带入数据库 ...
- 【Linux】E297: Write error in swap file 解决办法
今天登陆到服务器上,发现通过vi 打开文件就会报错: E297: Write error in swap file E303: Unable to open swap file for "c ...
- 【Oracle】translate函数用法解析
转自:https://blog.csdn.net/shwanglp/article/details/52814173 基本语法: translate(string,from_str,to_str); ...
- 【ORA】ORA-00030: User session ID does not exist.
今天巡检,查询锁相关的情况的时候,确认业务后,准备将锁干掉,但是干掉的时候报了一个错误,ORA-00030 发现回话不存在,我以为pmon进程已经将锁进程kill掉了,就再次查看,发现,还是存在 这个 ...
- windows下部署Grafana +prometheus平台监控
1.Prometheus简介 Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖.用户只需要下载对应平台包,解压并且添加基本的配置即可正常启Prometheus S ...
- ABAP 面试问题和答案
What is an ABAP data dictionary?- ABAP 4 data dictionary describes the logical structures of the obj ...
- java 不利用第三个变量的情况下将值互换
package com.zcj.eg001; public class VarChange { public static void main(String[] args) { int a = 10; ...
- pytest学习笔记(pytest框架结构)
一.pytest框架中使用setup.teardown.更灵活按照用例级别可以分为以下几类: 1.模块级:(setup_module.teardown_module)在模块始末调用 2.函数级:(se ...