zoukankan      html  css  js  c++  java
  • 1430:家庭作业

    1430:家庭作业

    题解

    本题和智力大冲浪可以说有异曲同工之喵啊,唯一不同的是本题要加上一步优化,防止超时

    因为是保证学分尽量多,所以先按学分从大到小排序,把作业在规定期限内尽量靠后排

    接下来讲一讲优化(借鉴了一下度娘找到的大佬的博客)

    比如说我有三个作业

    [ 2  6 ] [ 2  5 ] [ 2  4 ]

    我把第一个作业安排到2 ,第二个作业安排到 1,那么第三个作业就不用考虑了,因为没有办法继续布置了,也就是1~line[ ].t 都已经排满了,那么我们标记一个dislike,表示从1~dislike都不可以安排作业了

    如果不加优化,每个都需要for循环判断,很浪费时间

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<functional>
    
    using namespace std;
    
    int n,dislike;
    long long ans;
    bool vis[1000001],fa[1000001];
    
    struct node
    {
        int t,w;
    }line[1000001];
    
    bool cmp(node x,node y)
    {
        return x.w >y.w ;
    }
    
    bool pan(int x)
    {
        for(int i=line[x].t ;i>=1;i--)
        {
            if(vis[i]==0)
            {
                vis[i]=1;
                return 1;
            }
        }
        dislike=line[x].t ;     //不可以继续安排作业了
        return 0;
    }
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&line[i].t ,&line[i].w );
        sort(line+1,line+n+1,cmp);
        
        memset(vis,0,sizeof(vis));
        
        for(int i=1;i<=n;i++)
        {
            if(line[i].t <dislike) continue;  //在1~dislike区间里都不可以安排作业了
            if(pan(i)) ans+=line[i].w ;
        }
        
        printf("%ld",ans);
        
        return 0;
    }
  • 相关阅读:
    AOJ 0189 Convenient Location (Floyd)
    AOJ 2170 Marked Ancestor[并查集][离线]
    POJ 1703 Find them, Catch them (并查集)
    复制构造函数 与 赋值函数 的区别(转)
    POJ 2236 Wireless Network (并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen (优先队列)
    HTML页面下雪特效
    基于Jquery的XML解析器,返回定制的HTML
    HTML,CSS 无边框桌面窗口
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10989652.html
Copyright © 2011-2022 走看看