P2577 [ZJOI2005]午餐
题面:https://www.luogu.org/problem/P2577
本题一旦设出f[i][j]表示前i个人,在1号窗口打饭总时间j,最早吃完饭的时间
那么就很容易想到
当把i放在1号窗口
f[i][j] = min(f[i][j], max(f[i-1][j-s[i].a], j+s[i].b))
f[i-1][j-s[i].a]即第i个人吃饭+打饭时间<=前i-1人吃完饭的时间
j+s[i].b即第i个人吃饭+打饭时间>前i-1人吃完饭的时间
当把i放在2号窗口
f[i][j] = min(f[i][j], max(f[i-1][j], sum[i]-j+s[i].b));
注意这里需要维护一个前缀和,然后就可以用sum[i]-j表示在2号窗口打饭总时间了.Code:
#include<bits/stdc++.h>
using namespace std;
const int N = 210;
int f[N][N*N];
struct node
{int a, b;bool operator <(node z) const{return b>z.b;}
}s[N];
int sum[N];
int main()
{int n;scanf("%d", &n);for(int i = 1; i <= n; i++)scanf("%d %d", &s[i].a, &s[i].b);sort(s+1, s+1+n);for(int i = 1; i <= n; i++)sum[i] = sum[i-1] + s[i].a;memset(f, 127, sizeof(f));f[0][0] = 0;for(int i = 1; i <= n; i++){for(int j = 0; j <= sum[i]; j++){if(j>=s[i].a) f[i][j] = min(f[i][j], max(f[i-1][j-s[i].a], j+s[i].b));f[i][j] = min(f[i][j], max(f[i-1][j], sum[i]-j+s[i].b));}}int ans = 2147483647;for(int i = 0; i <= sum[n]; i++)ans = min(ans, f[n][i]);printf("%d\n", ans);return 0;
}
转载于:https://www.cnblogs.com/ukcxrtjr/p/11567180.html
P2577 [ZJOI2005]午餐相关推荐
- Luogu P2577 [ZJOI2005]午餐
一道贪心+类背包DP的好题 首先发现一个十分显然的性质,没有这个性质整道题目都难以下手: 无论两队的顺序如何,总是让吃饭慢的人先排队 这是一个很显然的贪心,因为如果让吃饭慢的排在后面要更多的时间至少没 ...
- ZJOI2005午餐
描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不 ...
- [ZJOI2005]午餐
题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各 ...
- [ZJOI2005]午餐(贪心+dp)
首先若只有一个窗口,利用贪心,按吃饭时间从大到小排序即可 正确性证明: 定义 eat[i] = 第i个人的吃饭时间,time[i] = 第i个人的打饭时间 延长时间T[i]=max(eat[i]- ∑ ...
- [ZJOI2005]午餐 贪心+dp
这个题如果直接dp的话要考虑 先从题目类型入手,这种规划性问题 应该是个dp 1开始的时间.1结束的时间.2开始的时间.2结束的时间 这是200^6级别的状态数,且没有任何状态优化的余地 所以就要考虑 ...
- 2018.12-2019.1 TO-DO LIST
AC自动机 P3808 [模板]AC自动机(简单版)(完成时间:2018.12.06) P3796 [模板]AC自动机(加强版)(完成时间:2018.12.06) P2444 [POI2000]病毒( ...
- 洛谷试炼场 动态规划TG.lv(2)
P1273 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. ...
- 【做题记录】DP 杂题
P2577 [ZJOI2004]午餐 $\texttt{solution}$ 想到贪心: 吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序. 状态: \(f[i][j]\) 表示前 \(i\ ...
- 2018年10月训练记录(10.1~10.23)
前言 这篇博客记录的是我在201820182018年101010月的刷题列表. 由于时间比较匆忙,可能会有一些空链接,但我会尽快将它们补齐的. (目前链接已补至Oct7thOct\ 7thOct 7t ...
最新文章
- CNN 图像增强--DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks
- 简单上手Linux的输入输出重定向
- ajax返回头部页面,ajax getResponseHeader获取中文响应头
- 500 OOPS:cannot change directory:/root 问题
- ConcurrentHashMap实现原理--转载
- 大数据的起步:初学者
- Struts2 类型转换和数据校验
- P4768 [NOI2018] 归程(kruskal 重构树)
- android 16 登陆,那些年我们一起养过的电子鸡登陆Android平台
- LayaAir学习笔记
- shel--常用快捷键
- mysql 浏览量统计_统计网站的每日访问量
- 开热点给电脑消耗大吗_手机开启WiFi热点,提供流量给电脑上网,可行吗?
- 案例:自动复制黏贴bat
- HDMI 4K分辨率 时序
- 请大家帮忙看下这个shader的问题:
- 光电效应与光子|走进量子力学(3)
- android 音频裁剪(1)—MP3裁剪
- 2.给 Proxmox VE换源
- Linux apache服务器(上)