【dp动态规划】飙车

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

【问题描述】
[说明]此题中出现的所有数字均为整数 [背景]有天SubRaY发现宇宙新秀在玩一个游戏叫Need For Speed(什么?连大名鼎鼎的极品飞车都没听说过..),他发现宇宙新秀总是逆行,于是出现以下对话: SubRaY:你怎么老是在逆行道跑.. 宇宙新秀:近! SubRaY:你就不怕撞车.. 宇宙新秀:你提前写个程序计算一下不就完了! SubRaY:…… SubRaY实在不会写这个程序,于是他交给你.. [题目描述]已知公路总长L米,一共有K个赛道,你的赛车总是和公路上其他的普通的车走相反的方向,并且所有的车每秒沿赛道行驶1m(具体看图)(宇宙新秀:我的Evo IV怎么这么烂….). 问题是:跑到终点最少撞多少次车? 我们简化一下模型,画一个(L+1)*K的网格,设所有的车都是点,并且每秒末都会出现在这个网格的某个顶点上.公路上其他的车都以固定的1m/s的速度自上而下行驶,而你的跑车自下而上行驶,并且每秒可以从一个点行驶到它上方\左上方\右上方的点(假设飘移不浪费时间,具体请看图). 我们假设,撞车不会使车损坏,不会使车减速(宇宙新秀:我的Evo IV怎么这么强~~) 对于撞车的设定:当每秒末你的车和另外一辆车处在同一点上时,算撞车;你的车和另一辆车迎面开过来,算撞车.具体请看下图:
这里写图片描述
假设一开始你可以选择任意一个赛道开始比赛,要求你写一个程序,计算到达终点至少要撞多少次车. 对于上边的例子,只要开始选择第三赛道开始跑,然后一路向北,就可以不撞车而到达终点

【问题分析】
很基础的动归题,用F[i][j]表示当车子行驶到第i行第j列时能获得的最少碰撞次数,那么因为已知有三种走法,故可以写出方程式
F[i][j]=min(F[i-2][j]+c[i-1][j],min(F[i-2][j-1],F[i-2][j+1]))+c[i][j]
因为如果你是漂移的话,在漂移过程中是不会受到碰撞,根据运动的相对性,我们可以把赛车的速度设为2,然后假设其他车辆全都不许动!(我们都是木头人,祝oier们6.1快乐),再加上一些判定是否超出边境的情况即可。

我真是业界良心啊 。。。 希望能对将来在OI里沉浮的学弟学妹们有所帮助。

#include <iostream>
#include <cstdio>
#include <climits>
using namespace std;
const int N=101;
const int K=11;
const int inf=INT_MAX;
int n,k,ans;  bool c[N][K];  int F[N][K];
void read()
{
    int i,j;  char temp;
    scanf("%d%d",&n,&k);
    getchar();
    for (i=n;i>=1;i--)
    {
        for (j=1;j<=k;j++)
        {
            temp=getchar();
            if (temp=='1')
                c[i][j]=1;
        }
        getchar();
    }
    if (n%2==1)  n--;
    for (i=1;i<=n;i++)
        for (j=1;j<=k;j++)
            F[i][j]=inf;
    ans=inf;
    return;
}
void dp()
{
    int i,j,l;  bool flag;
    for (i=2;i<=n;i+=2)
        for (j=1;j<=k;j++)
        {
            flag=0;
            if (c[i][j])  flag=1;
            if (j>1)
                F[i][j]=min(F[i][j],F[i-2][j-1]+flag);
            if (j<k)
                F[i][j]=min(F[i][j],F[i-2][j+1]+flag);
            F[i][j]=min(F[i][j],F[i-2][j]+c[i-1][j]+flag);
        }
    for (i=1;i<=k;i++)
        ans=min(ans,F[n][i]);
    printf("%d\n",ans);
    return;
}
int main()
{
    freopen("nfs.in","r",stdin);
    freopen("nfs.out","w",stdout);
    read();
    dp();
    return 0;
}
【動態規劃】飆車 题目描述 [说明]此题中出现的所有数字均为整数 [背景]有天SubRaY发现宇宙新秀在玩一个游戏叫Need For Speed(什么?连大名鼎鼎的极品飞都没听说过..),他发现宇宙新秀总是逆行,于是出现以下对话: SubRaY:你怎么老是在逆行道跑.. 宇宙新秀:近! SubRaY:你就不怕.. 宇宙新秀:你提前程序计算一下不就完了! SubRaY:…… SubRaY实在不会这个程序 阅读详情

相关推荐

gif动态图合成

import imageio def create_gif(image_list, gif_name): frames = [] for image_name in image_list: frames.append(imageio.imread(image_name)) # Save them as frames into a gif ...

Elag的专栏 18万+

rnqoj-94-飙车-dp

动态规划的题目。 加入所有的都是不动的。 那么就相当于我的一次跑三个格,那么状态转移就出来了。 dp[i][j]=min(dp[i-2][j-1]+map[i][j],dp[i-2][j]+map[i][j]+map[i-1][j],dp[i-2][j+1]+map[i][j]); #include #include using namespace std; int map[100

青竹梦 972

昨天的新秀交易

Friday June 30, 2006 - 01:43pm (CST) # 公牛&开拓者:开拓者获得二号签新秀LaMarcus Aldridge(中锋),以及一个未来限制性第二轮选秀权;公牛则获得四号签新秀Tyrus Thomas(前锋)以及Viktor Khryapa(前锋)。 公牛打劫了一个khryapa,反正他们薪资空间大无比 # 凯尔特人&开拓者:开拓...

eyejavaeye的博客 245

【動態規劃】最大加權矩形

题目描述 给定一个正整数n( n<=100),然后输入一个N*N矩阵。求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大 。矩阵的每个元素属于[-127,127] 例: 0 –2 –7 0 在左下角: 9 2 9 2 –6 2 -4 1 -4 1 –4 1 -1 8 -1 8 0 –2 和为15 输入格式 第一行:

void* ptr = &OI; 1095

ZJNU 1370 - 飙车

ZJNU 1370 - 飙车 题面 思路 由于是双向行驶,所以如果我们假设其余跑都不动,那么每次跑在\(Y\)方向上会行驶两格 于是根据题意模拟即可,如果某一秒赛换道了,那就判断到达的点是否有赛即可,最多会有一次碰 如果不换道,可能会产生两次碰 使用\(dp[i][j]\)表示跑实际开到\(Y=i\),此时在第\(j\)道上的最少碰次数 双向行驶,所以实际上跑开到\(Y=\l...

StelaYuri's Blog 99

前端RAG知识库实战:从LangchainJS到智能问答应用

检索增强生成(RAG)是一种将信息检索与文本生成相结合的技术架构,其核心原理是通过向量化技术将知识库文档转换为数学表示,再基于相似度检索匹配相关内容输入大模型。这种技术解决了大模型在处理领域特定知识时的局限性,在智能问答、文档助手等场景具有重要价值。在实际工程实践中,前端开发者需要掌握文档加载解析、文本分块策略、向量化检索等关键环节。以LangchainJS为例,该框架提供了完整的RAG实现方案,前端可以基于此构建轻量级知识库应用。通过合理设置分块大小、重叠参数等配置,结合浏览器端性能考量,前端能够实现高效

weixin_34160277的博客 367

都市大飙车 UESTC 1652 概率DP

记录一个障碍数组,用滚动数组优化内存 因为当前维由上一维转化需要很多判断,所以我们就由当前维推导下一维,这就很好操作了 状态转移很好想,具体请看代码 一道很模板化的概率DP,水 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using ...

weixin_34357962的博客 101

UESTC 1652 都市大飙车

题目链接:http://acm.uestc.edu.cn/#/problem/show/1652 解法:多段图问题,用滚动数组,转移很好想。 概率DP 算法复杂度:O(N*M*log N) 用kk[i]记录第i个障碍物的位置 pos=(b-1)*m+a; kk[i]=pos; dp1[j]记录当前所有道安全的概率 dp2[j]记录下一步所有道安全的概率 初始化:memset(d

I good vegetable a! 807

【概率dp】【滚动数组】CDOJ1652 都市大飙车

转移方程很显然。 因为是多段图模型,所以可以滚动数组优化一维空间。 #include<cstdio> #include<cstring> using namespace std; int m,K,n,p; bool zaw[1010][30010]; double f[2][30010]; int main(){ int x,y; bool ...

weixin_33978044的博客 92

{微结}2016.08.12【初中部 NOIP提高组 二试】模拟赛B

T1 斐波那契 标题既是解法。 怎么看怎么”紧扣标题” 然后随便搞搞。 发现a[n]=∏ni=1iFibo[n−i+1]a[n]=\prod_{i=1}^n i^Fibo[n-i+1] 然后强力分解质因数,根据乘法原理 切掉! 结果…一心暴力的我一个优化不加… 调了一中午啊啊啊啊!T2 刪數 观察题目 ∵只能从两边删数∴结果与操作顺序无关\because 只能从两边删数 \t

FarmerJohn 472

2017/10/25模拟赛

切题(problem)【问题描述】小 Z 和小 G 都是切题好手, 他们经常抢着切题, 今天他们已经决定好了 n 道要切的题目并准备按照顺序切掉这些题。 每道题都有一个难度值 di, 两个人都想自己切掉的题难度值之和最大, 但他们又不屑于切对方切过的题, 于是两人制定了如下规则: 一开始, 决定谁切下一道题的权利在作为老大的小 Z 手里,拥有这个权利的人可以指定谁切下一道题, 当被指定的...

diludiliang27877的博客 175

行驶工况构建实战:从数据清洗到工况合成的完整技术方案

行驶工况是描述辆速度随时间变化的标准曲线,被视为辆的“运动指纹”,是汽研发、性能评价和法规认证的基石。其核心原理在于通过数据处理与建模,从海量真实运行数据中提取代表性片段,并合成能反映特定交通特征的标准化曲线。这项技术的价值在于为辆能耗与排放测试、控制系统标定以及交通政策制定提供了关键基准。在工程实践中,构建高保真工况面临数据质量、特征提取与多目标优化等挑战。本文聚焦于行驶工况构建这一核心任务,深入探讨了从原始数据清洗、运动学片段划分、特征工程到聚类分析与优化拼接的全流程技术细节,并针对数据预处理、

weixin_34037173的博客 294

飙车,我只服这位不在地上跑的

飙车,我只服这位不在地上跑的 查看视频

数字体验的博客 1102

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

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

JSASL的博客 286

飙车[nfs.pas/c/cpp]

飙车[nfs.pas/c/cpp]   [说明]此题中出现的所有数字均为整数 [背景]有天SubRaY发现宇宙新秀在玩一个游戏叫Need For Speed(什么?连大名鼎鼎的极品飞都没听说过..),他发现宇宙新秀总是逆行,于是出现以下对话: SubRaY:你怎么老是在

呼啦啦呼啦啦 497

贾志鹏线性筛

贾志鹏线性筛题目

zz_ylolita 1272

卡特兰数——括号匹配问题

卡特兰数的递推公式是F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)} 一般性公式为F(n)=C(2n,n)/(n+1) 可以描述的问题有 1、n个元素的二叉查找树有多少种。 2、n*n棋盘从左下角走到右上角而不穿过主对角线的走法。 3、2n个人排队买票问题,票价50,n个人拿50元,n个人拿100元,售票处无零钱,能顺利卖票

zz_ylolita 2983

题解 赛游戏

题目传送门:Luogu P5590 Description 给定一些有向边,对它们赋上边权 w∈[1,9]w\in [1,9]w∈[1,9] ,使得每条 1→n1\to n1→n 的简单路径长相等。 Solution 差分约束。 对于每条通往终点的遍,加边add(b, a, -1), add(a, b, 9)。 如何判断与终点连通?dfs一遍就可以了。 然后跑差分约束,输出 dis 。 Code ...

AqoursFun的博客 313
上一篇: 【线段树】浅谈区间问题3
下一篇: 【SPFA】遭遇战 VijosP1404
Balala_Energy
博客等级 码龄10年 11粉丝 35原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值