ABC 364
ABC 364
E - Maximum Glutton
- 给定 \((a_i,b_i),X,Y\), 记 \(k\) 是第一个让 \(\sum_{i=1}^{k} a_i > X\) 或 \(\sum_{i=1}^{k} b_i > Y\) 成立的位置, 你可以重排二元组,请求最大的 \(k\).
- 标签:二维背包,思维题,判重
- 暴力: 记 \(f[j][k]\) 表示 \(suma=j,sumb=k\) ,最多能选几个数,有转移:
\]
- 初始化全0,倒着做01二维背包即可,时间复杂度 \(O(NXY).\)
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
using namespace std;
using ll = long long;
int f[10005][10005];
int n,a[88],b[88],X,Y;
signed main(){
// freopen("test.in","r",stdin);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>X>>Y;
F(i,1,n) cin>>a[i]>>b[i];
F(i,1,n) G(j,X,a[i]) G(k,Y,b[i]) f[j][k]=max(f[j-a[i]][k-b[i]]+1,f[j][k]);
cout<<min(f[X][Y]+1,n)<<"\n";
return 0;
}
- 优化:观察到 \(f\) 的值域很小只有 80, 而状态过大,我们考虑把其中一维和值域交换, 即采用交换权值法
- 记 \(g[i][j]\) 表示最终选 \(i\) 个数, \(suma=j\) 时最小的 \(sumb\), 最后只需要判断什么时候 \(g[i][1\sim X]\) 全部大于 \(Y\) 即可. 有转移:
\]
- 初始化所有 \(g\) 为 \(inf\), 但 \(g[0][0]=0\).
- 由于涉及到选几个数, 要做 \(n\) 次01背包, 所以即使倒着扫也无法保证不选重.
- 解决方法是开一个 \(vis[N][X][N]\). \(vis[i][j][k]\) 表示当 \(g[i[j]\) 最小时 \(k\) 有没有被用过,更新可以在 \(dp\) 过程中完成,复杂度仍然是对的, 详见代码。
- 时间复杂度就变成 \(O(N^2X)\) 啦!
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
using namespace std;
using ll = long long;
const int inf=0x3f3f3f3f;
int f[83][10005],psy[100005],pos[100005];
bool vis[83][10005][83];
struct node{
int a,b;
bool operator <(const node &o)const{
return a==o.a?b<o.b:a<o.a;
}
}c[88];
int n,X,Y;
signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>X>>Y;
F(i,1,n) cin>>c[i].a>>c[i].b;
sort(c+1,c+n+1);
memset(f,0x3f,sizeof(f));
f[0][0]=0;
F(i,1,n) {
memset(pos,0,sizeof(pos));
memset(psy,0,sizeof(psy));
G(j,X,1) {
F(k,1,n) {
if(j<c[k].a) break;
int tmp=f[i-1][j-c[k].a]+c[k].b;
if(!vis[i-1][j-c[k].a][k] && f[i][j]>tmp) {
psy[j]=j-c[k].a;
f[i][j]=tmp;
pos[j]=k;
}
}
}
F(j,1,X){
if(psy[j]) F(k,1,n) vis[i][j][k] = vis[i-1][psy[j]][k];
if(pos[j]) vis[i][j][pos[j]]=1;
}
}
int ans=n;
F(i,1,n){
bool tag=0;
F(j,1,X) if (f[i][j]<=Y) tag=1;
if(!tag) return cout<<i<<"\n",0;
}
cout<<n<<"\n";
return 0;
}
ABC 364的更多相关文章
- 【IOS】将一组包含中文的数据按照#ABC...Z✿分组
上一篇文章[IOS]模仿windowsphone列表索引控件YFMetroListBox里面 我们一步步的实现了WindowsPhone风格的索引. 但是有没有发现,如果你要实现按照字母排序,你还得自 ...
- 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }
平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...
- 学习Python的ABC模块(转)
http://yansu.org/2013/06/09/learn-Python-abc-module.html 1.abc模块作用 Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助a ...
- 将abc的全排列输出
#include "iostream" using namespace std; void swap(char a[],int i,int j){ char temp; temp= ...
- 关于String str =new String("abc")和 String str = "abc"的比较
String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...
- IE9 使用document.getElementsByName("abc") 不能获取到名称相同SPAN元素
<div name="abc"></div> <input name="abc" type="text" /& ...
- 经典String str = new String("abc")内存分配问题
出自:http://blog.csdn.net/ycwload/article/details/2650059 今天要找和存储管理相关的一些知识,网上搜了半天也没有找到完善的(30%的程度都不到),没 ...
- 再谈ABC
最近一直在看蒋老师那13篇<我的WCF之旅>,终于看完了,看得很慢,记得最初出来工作的时候那时的技术总监建议我去看的,可几个月前我才开始看,看了几个月才把13篇看完.第一篇WCF的博文是我 ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- WCF ABC
参考文献 http://blog.sina.com.cn/s/blog_7358f8b201012pnt.html http://www.cnblogs.com/CodingPerfectWorld/ ...
随机推荐
- 高级工程师面试大全- java基础篇
1.什么是java虚拟机 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功 ...
- SMU Summer 2023 Contest Round 13
SMU Summer 2023 Contest Round 13 A. Review Site 我们总是可以把差评放到另一个服务器,好评和中立放另一个,这样最多投票数就是好评与中立数 #include ...
- 平衡搜索树-AVL树 图文详解 (万字长文)
目录 AVL树 AVL树的概念 AVL树节点的定义: AVL树的插入 基本情况分析 平衡因子对应的操作 旋转操作 分析需要旋转的情况 结论 4种旋转操方法与特征 6种双旋平衡因子特征 代码实现 四种旋 ...
- 互联工厂数据交换标准:IPC-CFX
大家好,我是Edison. 全球电子制造主要集中在中国,面向未来工业4.0.中国制造2025的战略转型升级,互联互通是基础.数据是核心,如何从用户角度来定义设备加工数据的内容完整性.有效性.可扩展性将 ...
- 理解async 和 await
await 后面接的是promise,await语句下面(注意:不是await后面,而是await所在语句的下面,即下行以后)的代码就相当在promise.then()里面执行,有文章说 await后 ...
- Openharmony 跑 CV 应用
最近有个项目,老同学让帮忙验证一个在ARM 板上跑 OpenHarmony,然后再集成一个CV算法上去,写这个文章主要是整理一下思路.如果有思路不对的地方,也烦请指出. 1. 个人做纯软件比较多,所以 ...
- Coursera self-driving2, State Estimation and Localization Week3, GNSS IMU for pose estimation
如何表示旋转?三种方法 1. rotation matrix 2. unit quaternions 四元数 3. Euler angles 4. compare 坐标系 ECIF - Earth-C ...
- JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的区别
JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的异同点 一.什么是 structuredClone? 1. struc ...
- 题解:AT_arc116_b [ARC116B] Products of Min-Max
在题库里面乱翻,就翻到了. 因为在这道题里面子序列不需要考虑元素顺序,所以原序列无论是什么顺序都不会影响答案. 所以先把元素按照从大到小的顺序排列,然后考虑每个元素的贡献. 在当前序列中,对于元素 \ ...
- SQL 高级语法 MERGE INTO
根据与源表相联接的结果,对目标表进行插入.更新.删除等操作. 例如,对目标表,如果源表存在的数据则更新,没有的则插入,就可以使用MEREG进行同步. 基本语法 MERGE INTO target_ta ...