当前位置: 首页 > news >正文

Luogu P2577 午餐(ZJOI2004)

这个题的状态比较难想。
首先能想到的是按照吃饭时间倒着排序。如果选中了相同的序列,那么显然吃饭时间越小的排在后面最后的结果越好。
既然是两个队列,想到开一个f(i,j)f(i,j)f(i,j),其中i,ji,ji,j表示每个队列里面选到的最后一个同学在原序列中的index。一开始想f(i,j)=min(f(i−1,j)+X,f(i,j−1)+Y)f(i,j)=min\bigg(f(i-1,j)+X,f(i,j-1)+Y \bigg)f(i,j)=min(f(i1,j)+X,f(i,j1)+Y)之类的模型,但是发现你不知道具体的时间,此路不通。想到用时间做状态,但是看起来有点大。
然后看了一下答案,发现是在打饭时间上做0-1背包。O(MN)O(MN)O(MN)是可以过的。
状态f(i,j)f(i,j)f(i,j)表示第一个队列打饭时间到jjj,两个队列已经选完iii个同学时的最小值。
这时隐含着另一个队列的打饭时间k=Si−jk=S_i-jk=Sij
选第一个或者选第二个,就可以开始搞了
f(i,j)=min(max(f(i,j−a),j+b),max(f(i,j),k+b))f(i,j)=min\bigg(max\big(f(i,j-a),j+b \big),max\big(f(i,j),k+b\big)\bigg)f(i,j)=min(max(f(i,ja),j+b),max(f(i,j),k+b))

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef unsigned long long ull;const int N = 202, M = 40004;
pii x[N];
int s[N];
int n;
int f[2][M];int main(){
//	freopen("in.txt", "r", stdin);cin >> n;for(int i = 1; i <= n; ++ i) {int a, b;cin >> a >> b;x[i] = {a, b};}sort(x + 1, x + n + 1, [](pii a, pii b) {if(a.second == b.second) return a.first < b.first;return a.second > b.second;});for(int i = 1; i <= n; ++ i) s[i] = s[i - 1] + x[i].first;memset(f, 0x3f, sizeof(f));f[0][0] = 0;int op = 1, q = 1 - op;for(int i = 1; i <= n; ++ i, op = 1 - op, q = 1 - q) {memset(f[op], 0x3f, sizeof(f[op]));auto [a, b] = x[i];for(int j = 0; j <= s[i]; ++ j) {int k = s[i] - j;if(j >= a) {int t0 = max(f[q][j - a], j + b);f[op][j] = min(f[op][j], t0);}int t0 = max(f[q][j], k + b);f[op][j] = min(f[op][j], t0);}}int ans = 1 << 30;for(int j = 0; j <= s[n]; ++ j) {ans = min(ans, f[q][j]);}printf("%d\n", ans);return 0; 
}
http://www.dtcms.com/a/304906.html

相关文章:

  • 市政道路积水监测系统:守护城市雨天出行安全的 “智慧防线”
  • iOS仿写 —— 计算器
  • 前端代码格式化工具HTML离线版
  • redhat7.9更换源为centos7(阿里云源-目前centos7可用的源)
  • 函数对象 vs 函数指针 vs lambda:该用哪个才高效?
  • 利用对称算法及非对称算法实现安全启动
  • 【车联网kafka】Kafka核心架构与实战经验(第一篇)
  • 【机器学习深度学习】分布式训练的核心技术全解:数据并行、模型并行、流水线并行与3D混合并行
  • 基于最小二乘支持向量机(LSSVM)的气象预测
  • 原生html+js+jq+less 实现时间区间下拉弹窗选择器
  • css 二维变换之详说
  • 引领汽车加速向具身智能进化,吉利携阶跃星辰参展WAIC 2025
  • GitHub下载项目完整配置SSH步骤详解
  • 高效管理多个异步上下文:初识 Python 中的 AsyncExitStack
  • 在Word和WPS文字中让文字无极限缩放,用键盘更高效
  • protobuf2.5.0 arm_linux
  • STM32系统定时器(SysTick)详解:从原理到实战的精确延时与任务调度
  • 《计算机组成原理与汇编语言程序设计》实验报告五 循环结构及子程序
  • 译 | 结合聚类与注意力机制的强化学习在个性化促销中的应用
  • 图像增强11种几何变换方法示例
  • C++基础:模拟实现priority_queue(堆),详细介绍仿函数
  • 游戏盾从哪些方面保护网站业务?
  • GTSuite许可证性能优化建议
  • 第4章唯一ID生成器——4.4 基于数据库的自增主键的趋势递增的唯一ID
  • 前缀和-974.和可被k整除的子数组-力扣(LeetCode)
  • 实现视频实时马赛克
  • OpenShift AI - 将 Python 库安装到 Workbench 共享存储中
  • 【跨国数仓迁移最佳实践3】资源消耗减少50%!解析跨国数仓迁移至MaxCompute背后的性能优化技术
  • 深度学习篇---PaddleDetection模型选择
  • 《HCIA-Datacom 认证》希赛三色笔记:Vlan间三层通信过程解析