CF1203F2 Complete the Projects (hard version)(结论+背包+贪心)
题目
做法
对于加分的直接贪心
而掉分的用排序后的背包动规
假设有两个物品\((a_1,b_1)(a_2,b_2)\)
选第一个物品后无法选择第二个物品,假设开始值为\(r\):\(r>a_1,r+b_1<a_2\Longrightarrow r<a_2-b_1\)
如果先选择第二个物品后可以选择第一个物品:\(r>a_2,r+b_2\ge a_1\Longrightarrow r\ge a_1-b_2\)
则当\(a_1-b_2\le a_2-b_1\)时,先选择\(2\)更优:\(a_1+b_1\le a_2+b_2\)
我们按照\(a+b\)排序后直接动规即可
细节:在处理背包时要根据\(a\)的限制转移
Code
#include<bits/stdc++.h>
typedef int LL;
inline LL Read(){
LL x(0),f(1); char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0' && c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
const LL maxn=1e2+9,inf=0x3f3f3f3f;
struct node{
LL x,y;
}a[maxn],b[maxn];
LL n,r,ans,tot1,tot2;
LL f[60009];
inline bool cmp1(node xx,node yy){
return xx.x<yy.x;
}
inline bool cmp2(node xx,node yy){
if(xx.x+xx.y==yy.x+yy.y) return xx.x<yy.x;
else return xx.x+xx.y>yy.x+yy.y;
}
int main(){
n=Read(); r=Read();
for(LL i=1;i<=n;++i){
LL x(Read()),y(Read());
if(y>=0) a[++tot1]=(node){x,y};
else b[++tot2]=(node){x,y};
}
std::sort(a+1,a+1+tot1,cmp1);
for(LL i=1;i<=tot1;++i){
if(r>=a[i].x) r+=a[i].y,++ans;
else break;
}
std::sort(b+1,b+1+tot2,cmp2);
memset(f,-inf,sizeof(f));
f[r]=ans;
for(LL i=1;i<=tot2;++i)
for(LL j=b[i].x;j<=60000;++j){
if(j+b[i].y<0) continue;
f[j+b[i].y]=std::max(f[j+b[i].y],f[j]+1);
}
for(LL i=0;i<=60000;++i) ans=std::max(ans,f[i]);
printf("%d\n",ans);
return 0;
}
CF1203F2 Complete the Projects (hard version)(结论+背包+贪心)的更多相关文章
- Codeforces1203F2. Complete the Projects (hard version) (贪心+贪心+01背包)
题目链接:传送门 思路: 对于对rating有提升的项目,肯定做越多越好,所以把$b_{i} >= 0$的项目按rating要求从小到大贪心地都做掉,得到最高的rating记为r. 对于剩余的$ ...
- Codeforces 1203F1 Complete the Projects (easy version)
cf题面 Time limit 2000 ms Memory limit 262144 kB 解题思路 看见这题觉得贪心可做,那就贪吧.(昨天真是贪心的一天,凌晨才被这两道贪心题虐,下午多校又来,感觉 ...
- Codeforces 1203F2. Complete the Projects (hard version)
传送门 首先对于 $b>0$ 的工作显然有个贪心,把 $b>0$ 的按 $a$ 从小到大排序 把能做的都做了,然后得到一个最大等级 剩下就是考虑 $b<0$ 的工作了,看到数据显然可 ...
- Complete the Projects
F1. Complete the Projects (easy version) F2. Complete the Projects (hard version) 参考:Complete the Pr ...
- 集训第四周(高效算法设计)L题 (背包贪心)
Description John Doe is a famous DJ and, therefore, has the problem of optimizing the placement of ...
- How to manage IntelliJ IDEA projects under Version Control Systems
如何在版本控制系统中管理 IntelliJ IDEA 项目文件 IntelliJ IDEA 设置详细,功能强大.在实际工作中,我们有时会遇到跟同事共享项目文件的情况. 那么,有哪些项目文件应该加入到版 ...
- 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 ...
- HDU -2546饭卡(01背包+贪心)
这道题有个小小的坎,就是低于5块不能选,大于5块,可以任意选,所以就在初始条件判断一下剩余钱数,然后如果大于5的话,这时候就要用到贪心的思想,只要大于等于5,先找最大的那个,然后剩下的再去用背包去选择 ...
- HDU--3466(0-1背包+贪心/后效性)
题意是: 给你一些钱 m ,然后在这个国家买东西, 共有 n 件物品,每件物品有 价格 P 价值 V 还有一个很特别的属性 Q, Q 指 你如过想买这件物品 你的手中至少有这钱Q . 虽 ...
随机推荐
- js --桥接模式
定义: 将抽象部分与它的实现部分分离,使他们都可以独立的变化. 也就是说,桥接模式里面有两个角色: - 扩充抽象类 - 具体实现类 在写桥接模式之前,想在写一下关于抽象的理解.我觉得抽象这个概念过于抽 ...
- Redis 学习-Redis 的其他功能
一.慢查询 找到 系统中瓶颈的命令 1. 客户端请求的生命周期: ①. 慢查询通常发生在第三阶段. ②. 客户端超时不一定是慢查询,但慢查询是客户端超时的一个可能因素. 2. 相关配置 慢查询命令会存 ...
- 解决ifuse不支持24位UDID问题
在使用ifuse对iphone设备进行沙盒挂载时, 对类似XXXXXXXX-XXXXXXXXXXXXXXXX UDID设备会提示Invalid device UDID specified, lengt ...
- k8s 如何支持私有镜像
k8s如何支持私有镜像 实现无密钥编排 kubectl create secret docker-registry regsecret --docker-server=registry.cn-shen ...
- ubuntu---对比工具Meld
Beyond Compare是商业软件,下载地址:http://www.scootersoftware.com/download.php.下载完直接运行或者通过dpkg安装即可. 其实Linux下文本 ...
- 剑指Offer(二十三):二叉搜索树的后序遍历序列
剑指Offer(二十三):二叉搜索树的后序遍历序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- P1169 [ZJOI2007]棋盘制作[悬线法/二维dp]
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...
- 题解 UVa10892
题目大意 多组数据,每组数据给定一个整数 \(n\),求满足 \(LCM(x,y)=n\) 的不同无序整数对 \((x,y)\) 的数目. 分析 若有 \(LCM(x,y)=n\),则有 \(GCD( ...
- Õ() Big-O-notation
Õ只是大\(O\)表示法的变种,忽略了对数因子: \[f(n) \in \tilde O(h(n))\] \[=> \exists k : f(n) \in O \!\left( h(n)\lo ...
- Hbase表结构
1.Hbase表结构:可以看成map,里面有行键,行键是按照字母顺序排序.行键下面是列族,每个列族可以有不同数量的列甚至是没有列.每个列里面包含着不同时间版本的列的值. 行键:是按照字母的顺序排序的, ...