传送门

首先对于 $b>0$ 的工作显然有个贪心,把 $b>0$ 的按 $a$ 从小到大排序

把能做的都做了,然后得到一个最大等级

剩下就是考虑 $b<0$ 的工作了,看到数据显然可以 $O(nr)$ 考虑 $dp$,设 $f[i][j]$ 表示考虑完前 $i$ 个工作,当前等级为 $j$ 时能完成的最大工作数

然后发现这样搞有点问题,因为工作考虑的顺序是会影响到最终答案的,可能先做后面的工作再来做前面的工作可以做两个,但是如果先做前面的再做后面的可能会发现等级不够了...

考虑给所有工作确定一个顺序,使得如果先做 $2$ 不能做 $1$ ,并且先做 $1$ 可以做 $2$ ,则把 $1$ 排在 $2$ 前面考虑

设 $x+b_2<a_1$,$x+b1>=a2$ (注意这里 $b<0$),那么有 $x<a_1-b_2,x>=a_2-b_1$,即 $a_2-b_1<a_1-b_2$

所以排序时根据 $a_1-b_2$ 从大到小排序即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,M=;
int n,m;
struct dat {
int a,b;
dat (int _a=,int _b=) { a=_a,b=_b; }
inline bool operator < (const dat &tmp) const {
return a-tmp.b>tmp.a-b;
}
};
vector <dat> C,D;
inline bool cmp(const dat &A,const dat &B) { return A.a<B.a; }
int ans,f[N][M];
int main()
{
n=read(),m=read(); int a,b;
for(int i=;i<=n;i++)
{
a=read(),b=read();
if(b<) D.push_back(dat(a,b));
else C.push_back(dat(a,b));
}
sort(C.begin(),C.end(),cmp); sort(D.begin(),D.end());
for(auto A: C) if(m>=A.a) m+=A.b,ans++;
memset(f,~0x3f,sizeof(f)); f[][m]=;
int len=D.size(),res=;
for(int i=;i<=len;i++)
{
for(int j=;j<=m;j++)
{
f[i][j]=f[i-][j];
if(j-D[i-].b>=D[i-].a) f[i][j]=max(f[i][j],f[i-][j-D[i-].b]+);
res=max(res,f[i][j]);
}
}
printf("%d\n",ans+res);
return ;
}

Codeforces 1203F2. Complete the Projects (hard version)的更多相关文章

  1. Codeforces 1203F1 Complete the Projects (easy version)

    cf题面 Time limit 2000 ms Memory limit 262144 kB 解题思路 看见这题觉得贪心可做,那就贪吧.(昨天真是贪心的一天,凌晨才被这两道贪心题虐,下午多校又来,感觉 ...

  2. CF1203F2 Complete the Projects (hard version)(结论+背包+贪心)

    题目 做法 对于加分的直接贪心 而掉分的用排序后的背包动规 假设有两个物品\((a_1,b_1)(a_2,b_2)\) 选第一个物品后无法选择第二个物品,假设开始值为\(r\):\(r>a_1, ...

  3. Codeforces1203F2. Complete the Projects (hard version) (贪心+贪心+01背包)

    题目链接:传送门 思路: 对于对rating有提升的项目,肯定做越多越好,所以把$b_{i} >= 0$的项目按rating要求从小到大贪心地都做掉,得到最高的rating记为r. 对于剩余的$ ...

  4. Complete the Projects

    F1. Complete the Projects (easy version) F2. Complete the Projects (hard version) 参考:Complete the Pr ...

  5. codeforces 372 Complete the Word(双指针)

    codeforces 372 Complete the Word(双指针) 题链 题意:给出一个字符串,其中'?'代表这个字符是可变的,要求一个连续的26位长的串,其中每个字母都只出现一次 #incl ...

  6. Codeforces Round #579 (Div. 3) Complete the Projects(贪心、DP)

    http://codeforces.com/contest/1203/problem/F1 Examples input 1 - - output 1 YES input 2 - - output 2 ...

  7. Codeforces 716B Complete the Word【模拟】 (Codeforces Round #372 (Div. 2))

    B. Complete the Word time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. Codeforces Round #527-D1. Great Vova Wall (Version 1)(思维+栈)

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  9. Codeforces 1108E2 Array and Segments (Hard version) 差分, 暴力

    Codeforces 1108E2 E2. Array and Segments (Hard version) Description: The only difference between eas ...

随机推荐

  1. git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题

    在同步本地文件到线上仓库的时候 报错 pre -commit hook failed (add --no-verify to bypass) 当你在终端输入git commit -m "xx ...

  2. UDP和TCP浅析

    UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议. 在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较 ...

  3. 通过merge语句完成表数据同步

    此例中需要将center库中的tb_sys_sqlscripe表同步到branch,简单的语法如下:   merge into tb_sys_sqlscripe@branch b using tb_s ...

  4. ssh 远程登录错误

    错误信息: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATI ...

  5. Nginx优化防爬虫 限制http请求方法 CDN网页加速 架构优化 监牢模式 控制并发量以及客户端请求速率

    Nginx防爬虫优化 Robots协议(也称为爬虫协议,机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...

  6. Dom4j工具j解析XML原理和示例代码

    import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; i ...

  7. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_5 自定义类型转换器演示异常

    后端自动进行类型的转换.前端输入的年龄都是字符串的形式传递到后端. user的实体类  加一个Date日期类型格式的字段.生成get和set还有toString的方法 重新部署程序 日期用横线的方式 ...

  8. Web jsp开发学习——连接数据库,数据的增加和删除

    1.首先在newlist界面增加三个图表,带上事件 newlist.jsp <%@ page language="java" contentType="text/h ...

  9. JSP 传统标签extends TagSupport

    1.控制JSP页面某一部分内容是否执行 public int doStartTag() 返回EVAL_BODY_INCLUDE,执行 返回SKIP_BODY,不执行 2.控制整个JSP页面是否执行 p ...

  10. ubuntu搭建ssh服务

    本人在ubuntu16.4.4.0-13下测试 #man uname//用于打印系统信息 sudo apt install update sudo apt install openssh-server ...