1.尼克的任务

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>


#define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 10010
#define MAX 1<<30
#define V vector<int>

using namespace std;

typedef struct node{
    int s,e;
}node; 

node t[LEN];
int dp[LEN];
int st[LEN];

int cmp(node a,node b){            //用于递减排序,重定义大于符号 
    return a.s>b.s;
}

int main(){
//    freopen("尼克的任务.txt","r",stdin);
    int n,k,i,j,m;
    I("%d %d",&n,&k);
    F(i,1,k+1){
        I("%d%d",&t[i].s,&t[i].e);
        st[t[i].s]++;            //记录起始时间点 
    } 
    sort(t+1,t+1+k,cmp);        //让时间结构体递减排序
    for(i=n;i>=1;i--){            //对于时间,从后往前循环 
        if(st[i]==0){            //从后往前循环的过程中,没有没有查询到起始时间点 
            dp[i]=dp[i+1]+1;     //dp数组表示 从i时刻往后的空闲时间 
        }else{                    //查询到了起始时间点 
            for(m=1;m<=k;m++){    //对所有任务进行遍历 
                if(t[m].s==i){    //遍历到的任务的其实时间点是当前时间点 
                    dp[i]=max(dp[i],dp[i+t[m].e]);
                }                //找出所有i时间开始的任务,记录他们结束时 最大的空闲时间 
            } 
        } 
    } 
    O("%d\n",dp[1]);
    return 0;
}
View Code

相关文章:

  • 2022-12-23
  • 2021-08-10
  • 2022-12-23
  • 2020-04-22
  • 2022-01-12
  • 2021-08-05
  • 2021-10-20
猜你喜欢
  • 2021-08-20
  • 2021-07-01
  • 2022-02-05
  • 2022-12-23
  • 2021-08-07
  • 2021-09-03
  • 2022-12-23
相关资源
相似解决方案