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/ ...
随机推荐
- SMU Autumn 2023 Round 2(Div.1+2)
SMU Autumn 2023 Round 2(Div.1+2) C. Chaotic Construction 把环展开的话就是\(1 \sim 2n\),若\(D\)的位置放上路障的话,在这个展开 ...
- 搭建QT开发环境
下载 Qt官网,Qt下载网址 安装前要登录账号,其他的该咋就咋样,路径不能有中文. 组件自己选 我的是MinGW.Android.虚拟键盘.Qt脚本.Qt Creator 然后创个项目,能跑起来就是安 ...
- freertos学习笔记(十一)直接任务通知
直接任务通知 起源 队列和信号量是实时操作系统的典型功能,而FreeRTOS提供的直接任务通知比队列和信号量更小且速度更快(快45%) 开发人员应优先使用量身定制的功能:直接任务通知.消息缓冲区和流缓 ...
- IDEA 2023.2 最新安装使用教程(附激活码,亲测好用)
申明:本教程 IDEA 补丁.补丁均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除.若条件允许,希望大家购买正版 ! idea激活码使用教程 Step1 第一步下载IDEA软件 ID ...
- 小特性 大用途 —— YashanDB JDBC驱动的这些特性你都get了吗?
在现代数据库应用场景中,系统的高可用性和负载均衡是确保服务稳定性的基石.YashanDB JDBC驱动通过其创新的多IP配置特性,为用户带来了简洁而强大的解决方案,以实现数据库连接的高可用性和负载均衡 ...
- 丝滑解决Chatgpt频繁奔溃、断网掉线问题
事件缘由 这段时间使用Chatgpt的时候频繁出现something wrong等断网掉线问题,中间还频繁出现物品转向的人机验证(我那么具有迷惑性吗...),被烦的不行.后面了解到有一个KeepCha ...
- c# 8.0
1. nullable string 从前 string 一定是 nullable. 现在则不一定 string? name = null; 要加 ? 才可以表示 nullable 限制泛型不能 n ...
- 应聘软件测试 HR 会问到哪些问题?收藏这一篇就够了!
1.你还有收到其他offer吗? 其实hr问你offer情况,是对你感兴趣,想要进一步了解你,看下你的市场竞争力. 但注意不要太坦诚的说:我还没有offer或者收到两个offer还想对比对比:也不要撒 ...
- 面试官:GROUP BY和DISTINCT有什么区别?
在 MySQL 中,GROUP BY 和 DISTINCT 都是用来处理查询结果中的重复数据,并且在官方的描述文档中也可以看出:在大多数情况下 DISTINCT 是特殊的 GROUP BY,如下图所示 ...
- C++ 指针基础
指针 指针具有强大的能力,其本质是协助程序员完成内存的直接操作 指针: 特定类型数据在内存中的存储地址,即内存地址 指针只是一个逻辑概念,其实际应用是:指针变量 语法 * 符号有两种含义: 声明时:* ...