1 条题解

  • 0
    @ 2025-10-8 16:51:54

    可能是正解cpp:

    #include<bits/stdc++.h>//1078 代码直接修改得来,by cff_0102,没经过对拍验证,因为不会打暴力
    #define int long long
    using namespace std;
    const int N=1e6+10;
    template<typename T>void qr(T& x)
    {
    	x=0;int f=1;char c=getchar();
    	for( ;!isdigit(c);c=getchar())if(c=='-')f=-1;
    	for( ; isdigit(c);c=getchar())x=x*10+c-48;
    	x=x*f;
    }
    struct node{int x,y,L;}a[N];
    int n,f[N];
    int find(int x)
    {
    	int L=1,R=n,mid,ans=0;
    	while(L<=R)
    	{
    		mid=(L+R)>>1; 
    		if(a[mid].y<=x)L=mid+1,ans=mid;
    		else R=mid-1;
    	}
    	return ans;
    }
    signed main()
    {
        qr(n);
        for(int i=1;i<=n;i++)
        {
            qr(a[i].x);qr(a[i].y);
    		a[i].L=a[i].y-a[i].x;
        }
        sort(a+1,a+n+1,[](const node &n1,const node &n2){return n1.y<n2.y;});
        memset(f,0x3f,sizeof(f));
        a[0]={0,0};
    	f[0]=0;
        for(int i=1;i<=n;i++)
        {
        	int tmp=find(a[i].x);
    		f[i]=f[tmp]+a[i].L;
    		if(tmp<i-1)f[i]=min(f[i],f[i-1]);
        }
        printf("%d\n",f[n]);
        return 0;
    }
    • 1

    *【动态规划:状态设计DP】不重叠线段的最小长度和[scy](待验证)

    信息

    ID
    285
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    70
    已通过
    33
    上传者