列表

详情


NC214715. 贪心算法(新生题)

描述

明年就要考研了,我给自己制定了学习科目,
但是我该怎么合理的安排我的学习时才能让一天学习到的内容最多呢?

输入描述

第一行输入学习科目数:n
之后连续输入n行,每行包括两个数据:科目开始时间和结束时间
n=0表示输入结束,不做处理

输出描述

输出所能完整学习到的最大科目数

示例1

输入:

6
8 12
6 11
14 15
16 18
15 20
19 22
0

输出:

4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 4ms, 内存消耗: 416K, 提交时间: 2022-12-15 17:17:34

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
    int a,b,c,d,sum=0;
    cin>>a;
    for(int i=1;i<=a;i++){
        cin>>b>>c;
        d=c-b;
        sum+=d;
    }
    int h;
    h=sum%a;
    int f;
    f=a-h;
    cout<<f<<endl;
    return 0;
}

C(clang11) 解法, 执行用时: 2ms, 内存消耗: 368K, 提交时间: 2021-05-15 08:59:31

#include<stdio.h>
int main()
{int a[7],b[7],n,c,d=1;
scanf("%d",&n);
 for(int i=0;i<n;i++)
 {scanf("%d %d",&a[i],&b[i]);}
 scanf("%d",&c);
 for(int i=0;i<n-1;i++)
 {if(b[i]<a[i+1])
  d=d+1;
  else
         b[i+1]=b[i];
  }printf("%d",d);
}

Python3 解法, 执行用时: 31ms, 内存消耗: 4520K, 提交时间: 2022-05-30 19:28:06

n=eval(input())
l=[]
for i in range(n):
    l.append([int(i) for i in input().split()])
l=sorted(l,key=lambda s:s[1])
c=1
t=l[0][1]
for i in l[1:]:
    if i[0]>=t:
        c+=1
        t=i[1]
print(c)

上一题