尼克的任务

这是一个关于尼克工作日任务安排的问题,目标是计算尼克能获得的最大空暇时间。输入包括工作日分钟数n、任务数量k及每个任务的开始时间s和持续时间p。程序从后往前遍历任务,更新每个时刻的最大空闲时间,并最终输出尼克的最大空暇时间。
摘要由CSDN通过智能技术生成
题目描述

尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。

尼克的一个工作日为 nn 分钟,从第 11 分钟开始到第 nn 分钟结束。当尼克到达单位后他就开始干活,公司一共有 kk 个任务需要完成。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成。如果某任务于第 pp 分钟开始,持续时间为 tt 分钟,则该任务将在第 (p+t-1)(p+t−1) 分钟结束。

写一个程序计算尼克应该如何选取任务,才能获得最大的空暇时间。

输入格式

输入数据第一行含两个用空格隔开的整数 nn 和 kk。

接下来共有 kk 行,每一行有两个用空格隔开的整数 pp 和 tt,表示该任务从第 pp 分钟开始,持续时间为 tt 分钟。

输出格式

输出文件仅一行,包含一个整数,表示尼克可能获得的最大空暇时间。

输入输出样例

输入

15 6
1 2
1 6
4 11
8 5
8 1
11 5

输出

4

思路
  • 因第i时刻的最大空闲时间和后面时刻选择任务的持续时间的时刻有关系所以应从后往前看
  • 在这里插入图片描述
代码
#include<bits/stdc++.h>

using namespace std;

const int N = 10010;

int n, k, s, p;
vector<int> q[N];
int f[N];


int  main()
{
    cin >> n >> k;

    while(k --)
    {
        cin >> s >> p;
        q[s].push_back(p);
    }

   for(int i = n; i >= 1; i --)
   {
       if(q[i].size())
       {
           for(int j = 0; j < q[i].size(); j ++)
           {
               f[i] = max(f[i], f[i + q[i][j]]);
           }
       }
       else f[i] = f[i + 1] + 1;
   }

   cout << f[1] << endl;

   return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会根据你的要求来回答你的问题。对于你的问题,我可以给你一些基本的代码框架,但是具体的实现还需要你自己来完成。 首先,你需要连接到数据库,使用 Python 的 MySQLdb 模块。具体的代码如下: ``` import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() ``` 然后,你需要创建一个 `select()` 方法,用于查询 t_stlident 中已经成年的学生信息。具体的代码如下: ``` def select(): # SQL 查询语句 sql = "SELECT * FROM t_stlident WHERE age >= 18" try: # 执行 SQL 查询语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() for row in results: # 打印查询结果 print("id=%s, name=%s, age=%s, score=%s" % (row[0], row[1], row[2], row[3])) except: print("Error: unable to fetch data") ``` 接下来,你需要创建一个 `insert()` 方法,用于添加一个学生信息。具体的代码如下: ``` def insert(): # SQL 插入语句 sql = "INSERT INTO t_stlident(id, name, age, score) VALUES (99, '尼克', 19, 60)" try: # 执行 SQL 插入语句 cursor.execute(sql) # 提交到数据库执行 db.commit() print("插入成功") except: # 如果发生错误则回滚 db.rollback() print("插入失败") ``` 然后,你需要创建一个 `delete()` 方法,用于删除学号是 99 的学生信息。具体的代码如下: ``` def delete(): # SQL 删除语句 sql = "DELETE FROM t_stlident WHERE id = 99" try: # 执行 SQL 删除语句 cursor.execute(sql) # 提交到数据库执行 db.commit() print("删除成功") except: # 如果发生错误则回滚 db.rollback() print("删除失败") ``` 最后,你需要创建一个 `update()` 方法,用于修改学号是 1 的学生的成绩为 60。具体的代码如下: ``` def update(): # SQL 更新语句 sql = "UPDATE t_stlident SET score = 60 WHERE id = 1" try: # 执行 SQL 更新语句 cursor.execute(sql) # 提交到数据库执行 db.commit() print("更新成功") except: # 如果发生错误则回滚 db.rollback() print("更新失败") ``` 以上就是基于任务1,使用 Pycharm 编写代码的基本框架,你可以根据这些代码来完成你的任务。如果你有任何问题,欢迎随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值