• 模板【分配任务问题】


    1.n个任务,endTime[i],costTime==1,value[i],使得得到的value最大

    2.分配任务问题,像这种要排序的东西, 反复使用就得留心

    n个任务,endTime[i],costTime[i],value[i]==1,使得做的任务最多

    题解【J-Taxed Editor 】 这个题深刻加深了对此算法的理解,而且错了好多次

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<queue>
    #include<iomanip>
    #include<iostream>
    #include<stack>
    using namespace std;
    
    ///-------------------------------------------------------常用规定部分
    //----------------------通用
    #define inf_ 0x3f3f3f3f//这是给int的inf,值为1061109567,2^31-1为2147483647
    #define reg_ register int
    #define for_reg(i, n) for(reg_ i = 1; i <= n; i++)
    #define ll_ long long
    #define ull_ unsigned long long
    //----------------------边访问
    #define visit_edge int i = p[u]; ~i; i = e[i].next
    #define define_v int v = e[i].v
    #define define_v_avoid_f int v = e[i].v;if(v == fa) continue
    //----------------------线段树
    #define mid_ int mid = (l+r)>>1//mid的定义
    #define len_ (r-l+1)
    #define l_id id<<1
    #define r_id id<<1|1
    #define l_son id<<1,l,mid
    #define r_son id<<1|1,mid+1,r
    #define include_(x,y,l,r) x<=l && r<=y
    //----------------------其它
    const int max_n = 1e2+10;
    const int max_m = 1e4+10;
    ///-------------------------------------------------------变量声明部分
    //--------------------------------------其它
    struct TASK
    {
        ll_ costTime, endTime;
        bool operator < (const TASK & tmp) const
        {
            return costTime < tmp.costTime;
        }
    } taskg[max_n];
    priority_queue<int> choosedTask;//记录选中task的花费时间的最大值
    ///--------------------------------------------------------函数声明部分
    //--------------------------------------其它
    
    ///--------------------------------------------------------main函数部分
    int main()
    {
        //freopen("in.txt","r", stdin);
        //freopen("out.txt","w", stdout);
        ios::sync_with_stdio(false);
        //InitEdge();
        int n;
        cin >> n;
        for_reg(i, n)
        {
            cin >> taskg[i].costTime >> taskg[i].endTime;
        }
        sort(taskg+1, taskg+1+n);
        ll_ costedTime = 0, choosedNumber = 0;
        for_reg(i, n)
        {
            if(costedTime + taskg[i].costTime > taskg[i].endTime && !(choosedTask.size() && choosedTask.top() > taskg[i].costTime))
                continue;
            costedTime += taskg[i].costTime;
            if(costedTime < taskg[i].endTime)
                choosedNumber++;
            else
            {
                costedTime -= choosedTask.top();
                choosedTask.pop();
            }
            choosedTask.push(taskg[i].costTime);
        }
        cout << choosedNumber <<endl;
        return 0;
    }
    ///--------------------------------------------------------函数定义部分
    //----------------------------------其它
  • 相关阅读:
    百分点零售行业大数据解决方案
    百分点用户标签管理系统
    百分点个性化系统解决方案
    百分点数据洞察系统解决方案
    来学学数据分析吧(二)第一章 预测和关联数量特征
    来学学数据分析吧(一)
    生产者和消费者问题学习以及Java实现
    java中的双重锁定检查(Double Check Lock)
    python学习(十四)面向对象
    python学习(十二)模块
  • 原文地址:https://www.cnblogs.com/bear-xin/p/15047553.html
Copyright © 2020-2023  润新知