首页 > 其他分享 >UVA12222 Mountain Road 山路 题解 dp

UVA12222 Mountain Road 山路 题解 dp

时间:2023-06-21 16:12:26浏览次数:56  
标签:Mountain cntb cnta int 题解 cin UVA12222 Road

UVA12222 山路

题意:

- - 一个山路只有一条车道,因此不能有两辆方向相反的车同时在车道内。同时,为了保证安全,车道内不能超车,且同向行驶的车间距必须大于10分钟。现在给你n辆车,三个参数依次表示行驶方向,到达时刻,行驶时间。问如何安排能使最后一个通过的车通过时的时刻最小,输出这个值。

------------


分析:
我们如果只考虑一边来车的情况,会发现,一定是先到的先走,否则不是最优。因此,最优解一定是形如A1,A2,A3,B1,B2,A4,B3,B4的序列,即走一段连续的A,再走一段连续的B,再走一段连续的A......一定不会出现A2先过,A1才过的情况。
题解:
考虑DP,设fi,j,k表示过了i辆车,其中有j辆A,最后一辆是A(k==0)/B(k==1)的最小时刻。

显然,初始时f[0][0][1]=f[0][0][0]=0,f[i][j][0/1]=inf

考虑状态转移:
设cnta为A的总数,cntb为B的总数,numb=i-j

1. f[i+x][j+x][0]=min(f[i][j][1]+mt),1<=x<=cnta-j。x表示i之后连续通过的A的数量,即从i+1到i+x全部过A,mt表示连续x辆A通过的最小时刻(mt的计算见代码)。

1. f[i+x][j][1]=min(f[i][j][0]+mt),1<=x<=cntb-numb,x表示i之后连续通过的B的数量,即从i+1到i+i+x全部过B,mt表示连续x辆B通过的最小时刻。

最终答案为min(f[n][cnta][1],f[n][cnta][0]),总时间复杂度O(n³)

#include<bits/stdc++.h>
using namespace std;
const int N=206;
const int inf=2e9+555;
struct node{
    int s,d;
}a[N],b[N];
char c;
int f[N][N][2],n,cnta,cntb,T;
int main(){
    cin>>T;
    while(T--){
        memset(f,0x3f,sizeof f);
        cin>>n;
        cnta=0,cntb=0;
        for(int i=1,u,v;i<=n;i++){
            cin>>c;
            cin>>u>>v;
            if(c=='A') a[++cnta]={u,v};
            else b[++cntb]={u,v};
        }
        f[0][0][0]=f[0][0][1]=0;        
        for(int i=0;i<=n;i++){
            for(int j=max(0,i-cntb);j<=i&&j<=cnta;j++){
                int numb=i-j,st,mt;
                mt=st=f[i][j][1];
                for(int x=1;x<=cnta-j;x++){
                    if(x==1) st=max(st,a[x+j].s),mt=st+a[x+j].d;
                    else st=max(st+10,a[x+j].s),mt=max(mt+10,st+a[x+j].d);
                    f[i+x][x+j][0]=min(f[i+x][x+j][0],mt);
                }
                st=mt=f[i][j][0];
                for(int x=1;x<=cntb-numb;x++){
                    if(x==1) st=max(st,b[x+numb].s),mt=st+b[x+numb].d;
                    else st=max(st+10,b[x+numb].s),mt=max(mt+10,st+b[x+numb].d);
                    f[i+x][j][1]=min(mt,f[i+x][j][1]);
                }
            }
        }
        cout<<min(f[n][cnta][1],f[n][cnta][0])<<endl;
    }
    return 0;
}

 

标签:Mountain,cntb,cnta,int,题解,cin,UVA12222,Road
From: https://www.cnblogs.com/DongPD/p/17496515.html

相关文章

  • 问题解决 --- surface go sd卡槽不识别问题
    问题描述之前好好的,突然发现没有识别sd卡,sd卡是好的问题原因可能是系统更新了uefi解决办法重启电脑,多次点按音量加键进入uefi,关闭sd卡,重启电脑到系统再次进入uefi,开启sd卡,重启电脑到系统,完成!......
  • 在一加7上kali nethunter安装好后更新到最新版本,vnc打开失败问题解决方法。
    首先说明nethunter的vnc本身就不稳定,是兼容性问题,而非非正常关闭导致的。解决方法:方法一:查看nethunre主app的开启vnc命令是不是终端不识别。现在vnc叫做kex。方法二:更新到最新版本,sudoaptupdate&aptupgrade,如果还是打不开的话,更新nethunre主app,在https://store.nethunter.co......
  • ARC162 题解
    A.EkidenRace(450)题意:\(n\)个人在进行往返跑比赛,其中第\(i\)个人在回程前的排名是\(i\),总排名是\(p_i\),问有多少个人可能成为回程中跑得最快的人?如果对于\(i\),存在某个\(j>i\),使得\(p_j<p_i\),那么\(j\)在回程途中超过了\(i\),\(i\)肯定不能成为答案,否则一定可以。......
  • zabbix设置中文后乱码问题解决
    zabbix设置中文后乱码问题解决 1.在本机控制面板找到字体选项(或者C:\Windows\Fonts文件夹选择一个上传到centos服务器中也可以)注意是复制,不是切题,因为windows系统自己还得要用字体。我这里选择的是简体黑体 2.服务器搜索zabbix的fonts目录 find/-namefonts cd......
  • [TJOI2007]路标设置 题解
    题目链接:https://www.luogu.com.cn/problem/P3853题目大意:给出一个递增数组,插入K个值,使其差分数列的最大值最小;值得注意的是,此题中每个数字都是整数考点:整数二分错误思路:利用堆排,取最大值直接二分code:1#include<bits/stdc++.h>23usingnamespacestd;45int......
  • UVA11090 Going in Cycle!!题解
    题目大意给定一个N个点M条边的带权有向图,求平均值最小的回路。解法看到这种题目,喜欢打暴力的我一下就想到:遍历整个图,找到每一个环,然后算出它们的平均值,最后比较出最小值。然而,呃...,会T飞...既然我们不能暴力找最小值,那还有什么别的办法吗?我们只需要输出一个最小值就行了,既然......
  • 题解 P4108【[HEOI2015]公约数数列】
    看到这种奇怪的操作,首先想到分块。以下记值域为\(w\),块长为\(B\)。前缀\(\gcd\)显然单调不增,而且后一个必须是前一个的因数,如果变化至少要减半。因此,我们知道,共有\(\mathcalO(\logw)\)个不同的前缀\(\gcd\)。我们可以接受对这些块暴力,只需要对前缀\(\gcd\)都相同的块......
  • uni-app微信小程序路由传参数据截断问题解决
    跳转页面:因为数据接受页面是富文本编辑器接收,所以先是将数据双引号处理了。数据太多太长,跳转页面只要用encodeURIComponent()函数将其数据处理后传过去constdetails=this.oneform.text.replace(/"/g,'\'')this.$tab.navigateTo(`/pages/common/editor/editor?details=${e......
  • 我是如何写题解的
    在算法竞赛中,写题解是我们不可或缺的一部分。它不仅能够帮助我们整理思路、总结经验,还可以与他人分享我们的解题思路和代码实现。然而,写一篇较完备的题解往往非常繁琐,需要手动复制粘贴题目链接、题号和AC代码,这不仅费时费力,还容易分散我们的注意力,因为我们写题解的核心内容是对题......
  • 【问题解决】 网关代理Nginx 301暴露自身端口号
    一般项目上常用Nginx做负载均衡和静态资源服务器,本案例中项目上使用Nginx作为静态资源服务器出现了很奇怪的现象,我们一起来看看。“诡异”的现象部署架构如下图,Nginx作为静态资源服务器监听8080端口,客户浏览器通过API网关的443端口(就是https)获取Nginx静态资源。现象是用户浏览......