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/ ...
随机推荐
- ARM架构及ARM指令集、Thumb指令集你了解多少?
https://www.sohu.com/a/339622340_100281310 1991 年ARM 公司成立于英国剑桥,在成立后的那几年,ARM业绩平平,工程师们也人心惶惶,害怕随时都会失业.在 ...
- 23. 基于Cortex-A9 uboot代码启动分析
本篇文章是彭老师第一次在B站直播间,边直播边记录笔记,视频已经上传到B站. 现在完善整理成该篇文章,有想学习uboot启动的代码详细流程的老铁可以进入我B站空间配合视频一起学习. [视频地址] B站用 ...
- SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
SimpleRAG介绍 SimpleRAG是基于WPF与Semantic Kernel实现的一个简单的RAG应用,可用于学习与理解如何使用Semantic Kernel构建RAG应用. GitHub地 ...
- Scikit-learn从入门到放弃
目录 Scikit-learn简介 SVM分类 随机森林回归 K-means聚类 前置建议阅读: 1.NumPy从入门到放弃 2.Pandas从入门到放弃 3.SciPy从入门到放弃 Scikit-l ...
- 这应该是全网最详细的Vue3.5版本解读
前言 Vue3.5正式版在这两天发布了,网上已经有了不少关于Vue3.5版本的解读文章.但是欧阳发现这些文章对3.5中新增的功能介绍都不是很全,所以导致不少同学有个错觉,觉得Vue3.5版本不过如此, ...
- Git使用经验总结6-删除远端历史记录
删除远端的历史记录但是不影响最新的仓库内容是笔者一直想实现的功能,有两个很不错的用处: 有的历史提交不慎包含了比较敏感的信息,提交的时候没注意,过了一段时间才发现.这个时候已经有了很多新的历史提交,无 ...
- Splay/LCT 学习笔记
唔,其实我不会 Splay,但是我会 LCT. 众所周知,会 LCT 和会 Splay 是两回事,因为 LCT 只需要旋至根即可. 到现在还是不会,但是先把 LCT 的 Splay 写一下吧. 自己复 ...
- elementUI的select下拉框增加checkbox选择框(可全选/取消)
elementUI的select下拉框增加checkbox选择框 一.实现效果 二.实现方法 1.组件代码如下: <div> <el-select ref="select& ...
- CSS & JS Effect – Styling Input Radio
原生 Radio 的 Limitation <input type="radio" style="width: 25px; height: 25px; cursor ...
- 深入理解ConcurrentHashMap
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进行put操作,调用了HashMap的putVal(),具体原因: 假设两个线程A.B都在进行put操作,并且hash函数计算 ...