UESTC 1652 都市大飙车

本文介绍了一种使用概率动态规划(DP)解决多段图问题的方法,并通过具体实例展示了如何利用滚动数组来实现算法。针对有障碍物的多车道场景,详细解释了状态转移过程及概率计算。

题目链接: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(dp1,0,sizeof(dp1));dp1[p]=1;
for(i=1;i<=n;i++)
{
memset(dp2,0,sizeof(dp2));
for(j=1;j<=m;j++)
{
如果该位置有障碍 dp2[j]=0
否则:
如果m=1 dp2[j]=dp1[j]
否则:
如果j=2 dp2[j]+=dp1[j-1]/2 如果j>2 dp2[j]+=dp1[j-1]/3
如果1

#include <bits/stdc++.h>
using namespace std;
const int maxn = 30010;
int m, k, n, p, a, b, kk[maxn];
double dp1[maxn], dp2[maxn];
double dp[2][maxn];
bool pos[1010][30010];
int now=0,pre=1;
int main()
{
    scanf("%d %d %d", &m,&k,&n);
    scanf("%d", &p);
    bool flag = 1;
    for(int i=1; i<=k; i++){
        scanf("%d %d", &a,&b);
        if(b<=n){
//            int pos=(b-1)*m+a;
//            kk[i]=pos;
            pos[b][a] = 1;
            flag = 0;
        }
    }
    if(m == 1){
        if(!flag){
            puts("0.000000");
        }
        else{
            puts("1.000000");
        }
        return 0;
    }
//    memset(dp1,0,sizeof(dp1));
//    dp1[p]=1;
//    for(int i=1; i<=n; i++){
//        memset(dp2,0,sizeof(dp2));
//        for(int j=1; j<=m; j++){
//            int cur = (i-1)*m+j;
//            int pos = upper_bound(kk+1,kk+k+1,cur)-kk;
//            pos--;
//            if(kk[pos]==cur){
//                dp2[j]=0;
//            }
//            else{
//                if(m==1) dp2[j]=dp1[j];
//                else{
//                    if(j==2) dp2[j]+=dp1[j-1]/2;
//                    if(j>2) dp2[j]+=dp1[j-1]/3;
//                    if(j>1&&j<m) dp2[j]+=dp1[j]/3;
//                    if(j==1||j==m) dp2[j]+=dp1[j]/2;
//                    if(j==m-1) dp2[j]+=dp1[j+1]/2;
//                    if(j<m-1) dp2[j]+=dp1[j+1]/3;
//                }
//            }
//        }
//        for(int j=1; j<=m; j++) dp1[j]=dp2[j];
//    }
//    double ans=0;
//    for(int j=1; j<=m; j++){
//        ans+=dp1[j];
//    }
//    printf("%.6f\n", ans);
    dp[now][p]=1;
    for(int i=1; i<=n; i++){
        swap(now, pre);
        memset(dp[now],0,sizeof(dp[now]));
        for(int k=1; k<=2; k++){
            if(!pos[i-1][1]){
                dp[now][k]+=dp[pre][1]/2.0;
            }
        }
        for(int k=m-1; k<=m; k++){
            if(!pos[i-1][m]){
                dp[now][k]+=dp[pre][m]/2.0;
            }
        }
        for(int j=2; j<m; j++){
            for(int k=j-1; k<=j+1; k++){
                if(!pos[i-1][j]){
                    dp[now][k]+=dp[pre][j]/3.0;
                }
            }
        }
    }
    double ans=0;
    for(int j=1; j<=m; j++){
        if(!pos[n][j]){
            ans+=dp[now][j];
        }
    }
    printf("%.6f\n", ans);
    return 0;
}
内容概要:本文围绕2026年高教社杯全国学生数学建模竞赛E题“SEM广告投放策略”,构建了一个涵盖诊断、分类、优化与鲁棒决策的完整建模框架。基于某互联网公司142万元的SEM投放数据,文章从设计质量、关键词管理、出价预算和时间维度四个方面系统评估投放策略的合理性,揭示了消费集中、展位分层、工作日效应显著及假日效应分化等核心规律。提出基于成本—效益二维空间的五类关键词划分模型(黄金词、重点词、潜力词、问题词、无效词),结合中位数分割与聚类校验实现科学分类。在此基础上,建立预算约束下的0-1整数规划模型,采用两阶段算法求解最优关键词选择与出价策略,实现单位注册成本下降约20%。进一步引入CVaR鲁棒优化框架,有效应对竞价、点击、转化等不确定性,提升策略在极端情景下的稳定性与抗风险能力。; 适合人群:具备一定数据分析与数学建模基础,参与数学建模竞赛或从事数字营销优化的研究人员与从业者,尤其适合高校本科生、研究生及企业数据分析师。; 使用场景及目标:①用于数学建模竞赛中广告投放类问题的建模与求解;②为企业SEM广告投放提供科学的诊断、分类与优化方法;③实现预算约束下的关键词选择与出价决策;④在不确定环境下提升广告投放策略的鲁棒性与抗风险能力。; 阅读建议:此资源不仅提供完整的建模思路与算法实现,还包含实际运行结果与策略输出模板,建议读者结合代码实践,深入理解模型构建逻辑,重点关注分类规则设计、整数规划建模及鲁棒优化的实现过程,并尝试在类似业务场景中进行迁移应用。
内容概要:本文研究了一种面向高维约束空间的多种群灰狼优化算法(MP-GWO),并将其应用于多无人机协同航迹规划问题中。通过引入多种群机制对标准灰狼优化算法进行改进,增强了算法的全局搜索能力,有效克服了早熟收敛问题,提升了在复杂高维非线性约束环境下的优化性能。文章系统阐述了算法的设计原理、收敛性理论分析及在多无人机路径规划中的性能保障机制,结合Matlab实现了完整的仿真验证,充分展示了该算法在路径安全性、避障能力、收敛速度与解的质量等方面的优越性。同时,研究深入探讨了动态环境下的协同规划策略与防撞机制,进一步提高了系统的鲁棒性与实际应用价值。; 适合人群:具备一定智能优化算法基础,从事无人机路径规划、群体智能优化、智能控制、运筹学或自动化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决多无人机在复杂三维空间中的协同航迹规划与实时避障问题;②提升高维、强约束非线性优化问题的求解效率与稳定性;③为智能无人系统提供可扩展的优化框架与可靠的仿真验证工具; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点关注多种群划分策略、种群间信息交换机制与约束处理方法的设计原理,并可通过调整参数或测试不同场景进行复现实验,以掌握其在实际工程问题中的应用技巧与优化能力。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值