题目https://www.luogu.org/problemnew/show/P2577

题意:n个人每个人有一个打饭时间和吃饭时间,将他们分成两个队伍。每个人打到饭之后就马上去吃饭。问怎么安排可以让总体的吃饭时间最短。

思路:首先贪心还是很好想的。某个队伍的总吃饭时间实际上是打饭结束+吃饭时间最晚的那个时间。

一个队伍前面的那些人,如果他们吃完饭的时间都不超过总的排队时间的话,根本不需要考虑他们。而队伍的排队时间如果安排好了,是固定的。跟安排的顺序没有关系。

所以我们应该要把吃饭时间长的往前放。因为排队时间不受顺序影响但是吃饭时间受顺序的影响。

然后我们可以考虑怎么给他们分成两队。

首先可以考虑$dp[i][j][k]$表示考虑到第$i$个人,第一条队伍排队时间是$j$第二条队伍排队时间是$k$的时候,最早全部吃完饭的时间。

但是我们发现$j$和$k$存在关系,因为两个队伍总的排队时间是固定的。所以我们可以用$sum[i]$来维护排队时间的前缀和。就可以减少一个维度了。

所以我们可以用$dp[i][j]$表示考虑到第$i$个人,第一条队伍排队时间是$j$最早全部吃完饭的时间。此时显然第二条队伍的排队时间是$sum[i] - j$

于是有$dp[i][j] = min(max(dp[i-1][j-get[i]], j + eat[i]), max(dp[i - 1][j], sum[i] - j + eat[i]))$分别表示第$i$个人排在第一个队伍和排在第二个队伍。

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n;
const int maxn = ;
struct node{
int get, eat;
}stu[maxn];
int sum[maxn];
int dp[maxn][maxn * maxn * ]; bool cmp(node a, node b)
{
return a.eat > b.eat;
} int main()
{
scanf("%d", &n);
memset(dp, 0x3f, sizeof(dp));
for(int i = ; i <= n; i++){
scanf("%d%d", &stu[i].get, &stu[i].eat);
}
sort(stu + , stu + + n, cmp); for(int i = ; i <= n; i++){
sum[i] = sum[i - ] + stu[i].get;
}
dp[][] = ;
for(int i = ; i <= n; i++){
for(int j = ; j <= sum[i]; j++){
if(j >= stu[i].get)dp[i][j] = min(dp[i][j], max(dp[i - ][j - stu[i].get], j + stu[i].eat));
dp[i][j] = min(dp[i][j], max(dp[i - ][j], sum[i] - j + stu[i].eat));
}
} int ans = inf;
for(int j = ; j <= sum[n]; j++){
ans = min(ans, dp[n][j]);
}
printf("%d\n", ans);
return ;
}

洛谷P2577 午餐【贪心】【线性dp】的更多相关文章

  1. 2018.08.16 洛谷P2029 跳舞(线性dp)

    传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推 ...

  2. 洛谷 [P2577] 午餐

    DP + 贪心 我们发现,如果只有一个窗口,贪心即可解决,吃饭时间长的人一定要先打饭 有两个窗口的时候,这条性质依然满足,但是两个窗口如何分配,需要 01 背包 #include <iostre ...

  3. 2018.11.04 洛谷P2679 子串(线性dp)

    传送门 为什么前几年的noipnoipnoip总是出这种送分题啊? 这个直接线性dpdpdp不就完了吗? f[i][j][k][0/1]f[i][j][k][0/1]f[i][j][k][0/1]表示 ...

  4. 洛谷P1052 过河【线性dp】【离散化】

    题目:https://www.luogu.org/problemnew/show/P1052 题意: 青蛙要从0跳到超过$l$的地方,每一次可以跳$s$到$t$之间的任意数. 在河中有m个石头,要求在 ...

  5. 洛谷 P1140 相似基因 ( 线性DP || 类LCS )

    题意 : 题目链接 分析 :  可以观察到给出的配对代价表中对角线部分是正数 其余的都是负数,也就是说让相同字母的匹配的越多越好 即找出 LCS 但是这里 DP 的过程需要记录一下代价 有关 LCS ...

  6. 洛谷P2758编辑距离(线性DP)

    题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: !皆为小写字 ...

  7. 洛谷P2577 午餐

    题目链接 题意概述:有n个人,第i个人打饭消耗ai时间,离开后吃饭耗费bi时间,将n个人分成两队,合理分配人员使总时间最短并输出总时间. 我们把问题拆分为两个部分.首先是排列顺序,然后是怎么分到两个队 ...

  8. 洛谷$1541$ 乌龟棋 线性$DP$

    Luogu   CH Sol f[i]表示走到第i个格子时获得的最大分数 发现转移与各个爬行卡片的数量有关,一共只有4种卡片 所以就把这四种卡片的已使用张数也放进状态,f[i][a][b][c][d] ...

  9. 【题解】洛谷P2577 [ZJOI2005] 午餐(DP+贪心)

    次元传送门:洛谷P2577 思路 首先贪心是必须的 我们能感性地理解出吃饭慢的必须先吃饭(结合一下生活) 因此我们可以先按吃饭时间从大到小排序 然后就能自然地想到用f[i][j][k]表示前i个人在第 ...

随机推荐

  1. 035 Android Volley框架进行网络请求

    1.volley入门介绍 开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通 ...

  2. http拦截器-HandlerInterceptor

    简介 拦截器我想大家都并不陌生,最常用的登录拦截.权限校验.防重复提交.记录日志等等,总之可以去做很多的事情. 自定义拦截器HandlerInterceptorAdapter 我们以记录日志为例,介绍 ...

  3. 【HC89S003F4开发板】 3串口调试

    HC89S003F4开发板串口调试 使用资料自带的demo 主程序 /************************************系统初始化************************ ...

  4. SQLSERVER 根据值查询表名

    CREATE PROCEDURE [dbo].[SP_FindValueInDB](@value VARCHAR(1024)) ASBEGIN-- SET NOCOUNT ON added to pr ...

  5. Security Access Control Strategy && Method And Technology Research - 安全访问控制策略及其方法技术研究

    1. 访问控制基本概念 访问控制是网络安全防范和客户端安全防御的重要基础策略,它的主要任务是保证资源不被非法使用.保证网络/客户端安全最重要的核心策略之一. 访问控制包括 入网访问控制 网络权限控制 ...

  6. Asp.netCore 的Startup 不继承接口

    有一个问题: Asp.netCore 的Startup 要实现 Config 和ConfigServie 方法, 为什么不接口约束呢. 进入源码: // // 摘要: // /// Specify t ...

  7. 用.net4中的DynamicObject实现简单AOP

    public class DynamicWrapper : DynamicObject { private readonly object source; public DynamicWrapper( ...

  8. LunHui 的生命观

    LunHui 的生命观 来源 https://www.zhihu.com/question/346510295 作者:齐天大圣链接:https://www.zhihu.com/question/346 ...

  9. How to change SAPABAP1 schema password In HANA

    Symptom How to change SAPABAP1 schema password Environment HANA 1.x HANA 2.x Resolution Shutdown the ...

  10. 易优cms后台RCE以及任意文件上传漏洞

    前言 EyouCms是基于TP5.0框架为核心开发的免费+开源的企业内容管理系统,专注企业建站用户需求提供海量各行业模板,降低中小企业网站建设.网络营销成本,致力于打造用户舒适的建站体验.易优cms ...