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/ ...
随机推荐
- [题解] [ABC221H] Count Multiset - DP
[ABC221H] Count Multiset 题面翻译 输入两个正整数 \(N,M\),并存在一个集合,问你一个长度为 \(k\) 的合法集合存在多少个?你需要回答 \(k\) 的值为 \(1\) ...
- 2021 CCPC 威海
gym 知乎 确定了我先写缺省源,gjk 正开,zsy 倒开的策略 先读了 EFGH,发现是概率.博弈.计数,只能做 H,感觉我已经到点了.队友签了 AJ zsy 说 M 是多项式快速幂并准备开冲,看 ...
- java游戏服务器2023年7月22日
name 卡牌军团 放置卡牌游戏 开发语言: java mysql 通信http 账号服务器 提供验证等功能 中心服务器 跨服功能 排行榜 公会
- java_GUI_监听事件关闭窗口_AWT
package Panel;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEven ...
- java_GUI
package GUi;import java.awt.*;import static java.awt.Color.red;public class GuI { public static void ...
- elastersearch7.6.1搭建及基本操作详解
搭建 修改系统参数 vim /etc/security/limits.conf * soft nofile 655350 * hard nofile 655350 * soft nofile 6553 ...
- Drools决策表实践运用
Drools 决策表的使用与说明 Drools决策表的使用 官方文档决策表说明 决策表使用方式 执行drl代码及结果 Drools决策表的使用 官方文档决策表说明 Drools 决策表的使用 16.7 ...
- 【YashanDB知识库】绑定参数,同一个sql多个执行计划的问题
问题现象 同一个sql有两个执行计划,是否合理? 它的EXECUTIONS,ELAPSED_TIME等统计信息怎么看,是独立分开的还是统一计算的? 如下图: 问题影响版本 tpcc测试:23.2.1. ...
- 总结篇4:redis 核心数据存储结构及核心业务模型实现应用场景
总结篇4:redis 核心数据存储结构及核心业务模型实现应用场景 redis 和memcached 有什么区别?为什么在高并发下,单线程的redis 比多线程的效率高? mc 可以缓存图片和视频,re ...
- JS插入排序完全理解
插入排序是JS中的一种常见数组排序算法,记录一下如何理解并实现插入排序的功能; 首先看一下最直观的动态图 图片来源:https://www.javascriptc.com/ 从图像可以很直观的看出,插 ...