尼克的任务

题目描述

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

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

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

输入格式

输入数据第一行含两个用空格隔开的整数 𝑛n 和 𝑘k。

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

输出格式

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

样例 #1

样例输入 #1

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

Copy

样例输出 #1

4

Copy

提示

数据规模与约定
  • 对于 100%100% 的数据,保证 1≤𝑛≤104,1≤𝑘≤104,1≤𝑝≤𝑛,1≤𝑝+𝑡−1≤𝑛1≤n≤104,1≤k≤104,1≤p≤n,1≤p+t−1≤n。
  1.  进入在线编程模式 (Alt+E)
  2.  递交

0713Dp阶段练习

 已参加

  1.  查看比赛
  2.  成绩表
  3.  所有递交
  4.  帮助

#include<bits/stdc++.h>
using namespace std;
long long kk,n,m=0,f[501][10001],c[10001],dfd=0,e[10001],je,pp=1,cn,ct=1;
long long boo[10001];
struct ll{
    long long p,t,l;
}a[10001],b[1001][1001]; 
bool cmp(ll a,ll b){
    return a.p<b.p;
}
int main(){
    cin>>n>>kk;
        memset(f,-1,sizeof(f));
        for(int i=1;i<=kk;i++){
            cin>>a[i].p>>a[i].t;
            a[i].l=a[i].p+a[i].t-1;
        }    
    
//    else{

        sort(a+1,a+kk+1,cmp);    
        f[0][0]=0; 
        for(int i=1;i<=kk;i++){
            if(a[i].p==a[pp].p){
                for(int j=0;j<a[i].p;j++){
                    if(f[cn][j]>=0){
                        f[ct][a[i].l]=max(f[ct][a[i].l],f[cn][j]+a[i].p-j-1);
                    }
                }
                for(int j=a[i].p;j<=n;j++){
                    if(f[cn][j]>=0){
                        f[ct][j]=max(f[cn][j],f[ct][j]);
                    }
                }
            }
            else{
                for(int j=0;j<=n;j++){
                    //cout<<f[ct][j]<<" ";
                    f[cn][j]=-1;
                }
                //cout<<endl;
                m=cn;
                cn=ct;
                ct=m;
                pp=i;
                i--;
            }
        }
        for(int i=a[kk].p;i<=n;i++){
            dfd=max(dfd,f[ct][i]+(n-i));
        }
        cout<<dfd;        
//    }

    return 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、付费专栏及课程。

余额充值