动态规划问题——招聘会

题目背景:

那一年,这一年,青春散场,到毕业季,我们奔波着忙着找工作,来到招聘会上,看到黑压压的一大片人群..

题目描述:

毕业季,很多大公司来学校招聘,招聘会分散在不同时间段,小明想知道自己最多能完整的参加多少个招聘会(参加一个招聘会的时候不能中断或离开)。 假设现在有n个招聘会,每个招聘会都有个起止时间,时间由从招聘会第一天0点开始的小时数表示,n <= 1000 。 返回:最多参加的招聘会的个数n。

举个例子: 现在有3场招聘会,

他们的起始时间为:
 9-10 10-20 8-15

返回:2 

在一篇博客上看到的题目,据博主说是一道英雄会的题目

原文链接:https://blog.csdn.net/hjkhjk007/article/details/9005111

思路分析:仔细分析的话,很类似最长递增子序列问题,受到启发得到方案

最长子序列问题——笔者之前写的博客

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <queue>
#include <stack>
#include <algorithm>
#include <string.h>
#include <math.h>

int n;
int b[1010];
struct node{
    int s,e,l;
};
node a[1010];

int main (){

    while(~scanf("%d",&n)){
        for(int i=0;i<n;i++){
            scanf("%d%d",&a[i].s,&a[i].e);
            a[i].l=a[i].e-a[i].s;
            b[i]=1;
        }

        for(int i=0;i<n;i++){
            for(int j=0;j<i;j++){
                if(a[j].e<=a[i].s&&b[j]<b[i]+1)
                    b[j]=b[i]+1;
            }
        }

        int ans=0;
        for(int i=0;i<n;i++){
            if(b[i]>ans)ans=b[i];
        }
        printf("%d\n",ans);
    }
}
发布了62 篇原创文章 · 获赞 7 · 访问量 1651

猜你喜欢

转载自blog.csdn.net/qq_43331910/article/details/99821359