1 条题解

  • 0
    @ 2025-8-24 23:04:21

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar lam_dyr
    少年曾许凌云志,誓做天下第一流

    搬运于2025-08-24 23:04:21,当前版本为作者最后更新于2025-08-20 07:58:45,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    被黄题硬控两天半(虽然在集训吧)。不过是道好题。

    讲一下做这题的心路历程,看到有很多部分分决定先思考子任务 2244。结果 inf 年后发现无解都没判对 / gg。看了一眼题解发现全都是神秘的贪心结论,于是继续大力画图后推了 dp 式子最终 AC。和题解区做法暂时没有重复所以来写一篇。

    Solve

    题意很明确就不过多赘述了。

    这里我们首先注意到要覆盖整段草坪,任意两台机器人之间的部分不能留空 —— 它们合力一定要把中间的“缝隙” 切掉。

    dpi,jdp_{i,j} 表示已经处理了前 ii 台机器人的方向,且第 ii 台最终方向为 jj00 表示向左,11 表示向右)时所需的最小代价。最终答案就是 min(dpn,0,dpn,1)\min(dp_{n,0},dp_{n,1})

    考虑如何转移。假设我们已经算出了 dpi1,0dp_{i-1,0}dpi1,1dp_{i-1,1},要推 dpi,0dp_{i,0}dpi,1dp_{i,1}。关键在于 Δ=xixi1\Delta=x_i-x_{i-1} 这段草必须被它们合力切掉。我们讨论「上一辆跑向哪个方向」和「当前这辆跑向哪个方向」的四种情况,合法的就转移。

    前一辆 i1i-1 当前 ii 可行性条件 说明
    向右 pi1Δp_{i-1} \ge \Delta 前一辆要跑得远一点,至少切到或越过 xix_i,才能衔接得上这一辆。
    向左 向左 piΔp_i \ge \Delta 当前这辆要能跑到或越过 xi1x_{i-1},才能和前面这辆左切的部分接上。
    向右 pi1+piΔp_{i-1} + p_i \ge \Delta 它俩相向而行,分别切一段前缀和一段后缀,两段相加至少整个空隙。
    向左 向右 不合法 它俩相反方向行驶,必定在它们中间留下空草坪,无法覆盖。

    细节见代码。

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+10,INF=1e9;
    int n,x[N],p[N],d[N];
    int f(int i,int s){//把状态 0/1 映射到方向 -1/+1 
    	int w=(s==0?-1:1);
    	return w==d[i]?0:1;
    }
    int dp[N][2],ans;
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;++i)
    		cin>>x[i]>>p[i]>>d[i];
    	dp[1][0]=f(1,0);
    	dp[1][1]=f(1,1);
    	for(int i=2;i<=n;++i){
    		dp[i][0]=dp[i][1]=INF;//初始化 
    		int diff=x[i]-x[i-1];
    		//右->右 
    		if(p[i-1]>=diff && dp[i-1][1]<INF)
    			dp[i][1]=min(dp[i][1],dp[i-1][1]+f(i,1));
    		//左->左	
    		if(p[i]>=diff && dp[i-1][0]<INF)
    			dp[i][0]=min(dp[i][0],dp[i-1][0]+f(i,0));
    		//右->左 
    		if(p[i-1]+p[i]>=diff && dp[i-1][1]<INF)
    			dp[i][0]=min(dp[i][0],dp[i-1][1]+f(i,0));
    		//左->右 不合法 
    	}
    	ans=min(dp[n][0],dp[n][1]);
    	cout<<(ans>=INF?-1:ans);//INF无解 
    	return 0;
    }
    

    完结撒花

    • 1

    信息

    ID
    10797
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者