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

[题解]meal

题目描述

下课铃终于响了,你和一群朋友(共 N 人)一起冲到食堂。因为你们到的非常早,现在食堂窗口前面还没有人。食堂共有两个窗口。你们每个人打饭会耗时 a i,打完立刻去座位上吃饭会耗时 b i,由于你们吃完饭要一起打球,所以你们希望最后一个人吃完饭的时间尽可能早。现在,你要安排一种最佳的分队和排队方案使得所有人都吃完饭的时间尽量早。

输入格式

第一行一个整数 N ,表示共有 N 人。
接下来 N 行,每行两个整数a i​,b i​,表示每个人打饭和吃饭的用时。

输出格式

一个整数,表示所有人吃完饭的最早时间。

输入输出样例

输入

5
2 2
7 7
1 3
6 4
8 5

输出

17

思路:

这是一个经典问题(“午餐”问题),最优策略是:

  • 将人按 ( b_i ) 从大到小排序。
  • 用 DP:( f[i][j] ) 表示前 i 个人,第一个窗口总打饭时间为 j 时,所有前 i 个人中最晚结束时间的最小值。

转移方程

初始化

[ f[0][0] = 0 ]

转移

  • 放入窗口1:

    • 第一个窗口总时间 = j
    • 此人结束时间 = ( j + b_i )
    • 之前最晚结束时间 = ( f[i-1][j - a_i] )
    • 新的最晚结束时间 = ( \max(f[i-1][j - a_i], j + b_i) )
  • 放入窗口2:

    • 第一个窗口总时间 j 不变
    • 第二个窗口总时间 = ( \text{sumA}[i-1] - j )
    • 此人结束时间 = ( (\text{sumA}[i-1] - j) + b_i )
    • 新的最晚结束时间 = ( \ max(f[i-1][j], (\text{sumA}[i-1] - j) + b_i) )

算法步骤

  1. 按 ( b_i ) 从大到小排序
  2. 初始化 DP 数组
  3. 遍历每个人,更新 DP 状态
  4. 最终答案为 ( \min(f[n][j]) ) 对所有 j

代码:

#include<bits/stdc++.h>
using namespace std;
struct s{int a,b;
}p[505];
int n,c,y,f[2][250005];
bool cmp(s x,s y)
{return x.b>y.b;
}
int main(){/*freopen("meal.in","r",stdin);freopen("meal.out","w",stdout);*/scanf("%d",&n);int t=0;for (int i=1;i<=n;i++){scanf("%d%d",&p[i].a,&p[i].b);t+=p[i].a;}sort(p+1,p+n+1,cmp);memset(f,0x3f,sizeof(f));f[0][0]=0;for(int i=1;i<=n;i++){c^=1;memset(f[c],0x3f,sizeof(f[c]));y+=p[i].a;for(int j=0;j<=y;j++){//放入窗口1if (j>=p[i].a){f[c][j]=min(f[c][j],max(f[c^1][j-p[i].a],j+p[i].b));}//放入窗口2f[c][j]=min(f[c][j],max(f[c^1][j],(y-j)+p[i].b));}}int ans=INT_MAX;for(int i=0;i<=t;i++){ans=min(ans,f[c][i]);}printf("%d",ans);return 0;
}
http://www.gsyq.cn/news/27271.html

相关文章:

  • 2025 年公交/乡村/不锈钢/智能候车亭厂家推荐:江苏丁一城市智能科技有限公司提供定制化方案与全流程服务
  • 2025年10月宠物空气净化器产品推荐:权威榜单对比评测
  • 在 Linux 系统上安装 Miniconda、安装 Xinference,并设置 Xinference 开机自启动
  • 作业三(结对编程)-小学四则运算题目生成与判卷(Python + 可视化)
  • 2025年10月景区钢丝绳护栏厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 技术 | 在单台电脑上管理多个 GitHub 账户并解决推送问题(测试中)
  • CF2159E
  • 阿里云API网关日志问题
  • k8s部署的milvus提升性能需要扩容的角色节点
  • 小程序-定义头部导航
  • Golang的 cron 库
  • 2025年10月智能门窗代理厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • Android插件化框架
  • 完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)
  • 完整教程:Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明
  • 中小企业如何低成本部署电话呼叫软件网页版?一步步教你做
  • 配置git
  • Vscode误删文件如何恢复(二)?
  • 中国企业DevOps工具链选型标准深度解析:云原生与开源生态的博弈
  • 在PySide6/PyQt6的开发框架中,增加对表格多种格式录入的处理,以及主从表的数据显示和保存操作。
  • 笔记本电脑如何连接打印机?安装指南分享给你!
  • 技术团队负责人咨询AI数智化升级改造路径
  • 2025 年胶条厂家最新推荐排行榜:聚焦密封 / 系统门窗 / 环保领域,森特达领衔优质品牌榜单EPDM/硫化焊接/门窗复合/门窗幕墙胶条厂家推荐
  • Go 开发即时通讯服务端完整教程
  • Python 中 的 “.” 是分隔符还是运算符,都可以怎么用?
  • 国产项目管理工具Gitee如何以本土化优势领跑企业级市场?
  • 2025 年最新工矿灯生产厂家口碑推荐榜:精选 LED/防爆/高光效等多类型产品,助力企业选出实力与品质兼具的照明品牌
  • 2025.10.21 NOIP模拟赛
  • 基于GIS的林业数据资源管理驾驶舱
  • 2025年10月抗老面霜评测榜:紧致提亮真实数据排行