1 条题解

  • 0
    @ 2025-10-8 17:02:16
    #include <bits/stdc++.h> 
    using namespace std;
    const int N=1.5e5+5;
    struct node{int t,d;}a[N];
    bool cmp(node n1,node n2){if(n1.d!=n2.d)return n1.d<n2.d;return n1.t<n2.t;}
    //确保按结束时间排序,没有=
    priority_queue<int>Q;
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d%d",&a[i].t,&a[i].d);
        sort(a+1,a+n+1,cmp);//排序
        int t=0,ans=0;//t=时间 ans=计算能够做完的作业个数
        for(int i=1;i<=n;i++)
        {
            Q.push(a[i].t);//放入栈中
            t=t+a[i].t;    //加时间
    		ans++;         //总作业数增加1个
    		
    		if(t>a[i].d)   //如果因时限有矛盾。 
            {
                t=t-Q.top(); //消去时间影响 
                Q.pop(); //弹出用时最长的作业
                ans--; //总作业数减少1个
            }
        }
        printf("%d",ans);
        return 0;
    }
    
    • 1

    A33【反悔贪心】暑假作业[JSOI2007]建筑抢修

    信息

    ID
    2682
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    301
    已通过
    74
    上传者