第三周上动态规划(跑跑卡丁车 HDU - 1494 )

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种
加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为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段赛道使用.

题意:
一个赛车游戏,现在有赛道数和圈数,然后有正常通过每一个赛道的时间和用加速卡通过的时间,每正常通过五个赛道,获得一个加速卡,加速卡最多储存两个,但是有了两个时候,能量还是会增加,求通过全部赛道的最短时间

题解:
用dp[i][j]来表示通过i号赛道时还有j个能量时的最小时间,对每一个赛道,分三种情况
1.不用能量卡
for(j=14;j>=0;j–) //不用能量卡
dp[i][j+1]=min(dp[i][j+1],dp[i-1][j]+a[(i-1)%L]);//能量加1,此赛道正常通过
2.使用能量卡
for(j=14;j>=5;j–) //用能量卡
dp[i][j-5]=min(dp[i][j-5],dp[i-1][j]+b[(i-1)%L]);//能量减5,此赛道加速通过
3.能量为15时,第三个能量卡直接清除
dp[i][10]=min(dp[i][10],dp[i][15]); //有15个,减为10
最后在所有跑完赛道后剩余能量值的情况中找到最小值
代码:

#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
const int INF=0x3f3f3f3f;
int a[110],b[110];
int dp[10010][20];
int main()
{
    int L,N;
    while(~scanf("%d %d",&L,&N))
	{
    	int i,j;
        for(i=0;i<L;i++)
        scanf("%d",&a[i]);
        for(i=0;i<L;i++)
        scanf("%d",&b[i]);
        int sum=L*N;
        for(i=0;i<=sum;i++) //初始状态赋值为无穷大
        for(j=0;j<=15;j++)
        dp[i][j]=INF;
        dp[0][0]=0;
        for(i=1;i<=sum;i++)//遍历全部赛道
		{
            for(j=14;j>=0;j--)  //不用能量卡
            dp[i][j+1]=min(dp[i][j+1],dp[i-1][j]+a[(i-1)%L]);//能量加1,此赛道正常通过
            for(j=14;j>=5;j--)  //用能量卡
            dp[i][j-5]=min(dp[i][j-5],dp[i-1][j]+b[(i-1)%L]);//能量减5,此赛道加速通过
            dp[i][10]=min(dp[i][10],dp[i][15]); //有15个,减为10
        }
        int ans=INF;
        for(int i=0;i<15;i++)//找到最小值
        if(ans>dp[sum][i])
        ans=dp[sum][i];
        printf("%d\n",ans);
    }
    return 0;
}
【dp动态规划】飙车 【问题描述】 [说明]此题中出现的所有数字均为整数 [背景]有天SubRaY发现宇宙新秀在玩一个游戏叫Need For Speed(什么?连大名鼎鼎的极品飞车都没听说过..),他发现宇宙新秀总是逆,于是出现以下对话: SubRaY:你怎么老是在逆道跑.. 宇宙新秀:近! SubRaY:你就不怕撞车.. 宇宙新秀:你提前写个程序计算一下不就完了! SubRaY:…… SubRaY实在不会写这 阅读详情

相关推荐

hdu1494 跑跑卡丁车 动态规划

首先将能量和加速卡这个设定混合一下,把有一张加速卡看做有100%能量 那么,从0能量0加速卡到80能量2加速卡,可以对应为能量0,1,2,3……14 (20能量作1单位) 消耗加速卡即为能量减100接下来,大胆的将状态定为 能量槽、道路段 的组合。 dp[n][m] ,n为当前路段,m为当前能量 那么很容易得出状态转移方程(省略了条件,条件见代码)dp[i][j]=min⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪

做题的地方 611

动态规划跑跑卡丁车

跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(同时能量清0...

qq_36793206的博客 441

跑跑卡丁车 HDU - 1494动态规划

跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(同时能量清0).加速卡最多可以储存2个,也就是说当你有2个加速卡而能量再次集满,那么能量清零但得不到加速卡。一个加速卡只能维

Piink的博客 330

语言动态规划(12)___跑跑卡丁车(HDU 1494)

Problem Description 跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(

YzlCoder的记事本 3019

hdu1494 跑跑卡丁车 (动态规划)

Problem Description http://acm.hdu.edu.cn/showproblem.php?pid=1494 跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和

机器笨猫 2637

Hdu 1494 跑跑卡丁车 (DP_背包)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1494 题目大意:根据跑跑卡丁车改造而来的动态规划题目。跑道中每圈都分n个赛道,有L圈,跑完一个赛道能量加%20,跑完5个赛道能量满送一个加速卡,最多2个加速卡,如果加速卡为2个,能量为%100,又从0开始,不送加速卡。题目给定n个数ai和bi,ai为每个赛道正常耗时,bi为加速时的耗

1389

Hdu 1494 跑跑卡丁车

跑跑卡丁车 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1541    Accepted Submission(s): 498 题目链接 Problem Description 跑跑卡丁车是时下一款流

Magic__ 1022

HDU-1494 跑跑卡丁车

跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(同时能量清...

XYBDX的博客 286

跑跑卡丁车 HDU - 1494 (动态规划dp)

问题: 跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(...

HXX904的博客 449

hdu1494 跑跑卡丁车(动态规划)

Description 跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(N2...

dihangmeng9104的博客 167

跑跑卡丁车解题报告

Submit Status Practice HDU 1494 Description 跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种  加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速

sheldon的专栏 879

HDU 1494 跑跑卡丁车 dp

HDU1494 跑跑卡丁车 C++dp

The_OIer的博客 2913

hdu 1494 跑跑卡丁车

Problem : 1494 ( 跑跑卡丁车 )     Judge Status : Accepted//每个赛段有两种选择:放N2O和不放,所有的能量状态就有15种,我们总是选择用时最短的,要注意最后能量爆满清零时也可能获得最优解。 #include<iostream><br />using namespace std;<br />#define E 15<br />int main()<br />{<br />    long int i,j,k,m,n;<br />    long int aaa

Rickylv的专栏 1255

HDU-1494-跑跑卡丁车

跑跑卡丁车 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2232    Accepted Submission(s): 749 Problem Description 跑跑卡丁车是时下一款流的网络休闲游戏,你

程序员充电站(itcharge) 1282

HDU - 1494 跑跑卡丁车(转化题意,将三个状态转化为两个状态)

题目链接:https://cn.vjudge.net/contest/313189#problem/N 跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(同时能量清0).加速

zaiyang遇见 267

HDU - 1494 跑跑卡丁车(BFS+DP)

题目大意:跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(

静静地码 951

第三周 动态规划

G - 跑跑卡丁车 HDU - 1494 DP; *可以用dp[i]表示在第i段的最小时间,可以用j表示能量槽的个数,最多15个状态 *dp[i][j]:在第i段时的第j个能量槽满的状态下的最小时间,可以肯定最先时间为 *dp[n][k]:n表示圈数,k=[1,14],到达15段的时候会自动清零,也不会得到能量 *dp[i][j]=min(dp[i][j],dp[i-1][j-1]+a[i],dp[i-1][j+5]+b[i]) *注释:dp[i][j]可以通过dp[i-1][j-1]不使用加速卡直接使得

RUBGH的博客 143

hdu 1494 跑跑卡丁车(dp)

跑跑卡丁车 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1827    Accepted Submission(s): 602 Problem Description 跑跑卡丁车是时下一款流的网络休闲游戏

q775968375的专栏 1287

HDU ~ 1494 ~ 跑跑卡丁车(DP)

题目网址:跑跑卡丁车 跑跑卡丁车 跑跑卡丁车是时下一款流的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种  加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通驶的情况下,每通过1段赛道,可以获得20%的

张松超的博客 1033
上一篇: 第二周下最短路spfa算法(Candies POJ - 3159)
下一篇: Door Man POJ - 1300 (欧拉回路的简单应用)
JSASL
博客等级 码龄7年 12粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值