zoukankan      html  css  js  c++  java
  • 模板【分配任务问题】

    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;
    }
    ///--------------------------------------------------------函数定义部分
    //----------------------------------其它
  • 相关阅读:
    localhost和127.0.0.1及ip区别
    Linux常用命令大全
    百度搜红包相关代码(1)
    今天开博第一篇,呵呵
    杯具啊,中考
    新年感想
    【转】汇编语言基础
    margin与padding
    .net 中的Literal Label 控件、Literal 控件、Panel 控件和 Placeholder 控件
    HTML 5 中的新元素
  • 原文地址:https://www.cnblogs.com/bear-xin/p/15047553.html
Copyright © 2011-2022 走看看