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

首先,想一想可以发现贪心策略是把吃饭时间长的人放在前面;

设 f[i][j] 表示考虑到第 i 个人,目前第一个窗口排队总时间 j ,所有人吃完最晚的时刻;

于是可以算出来第二个窗口的排队总时间,就可以转移了;

把第 i 个人放在第一个窗口或第二个窗口,转移顺序竟然会影响答案??!!!总之把第一个窗口放在前面居然就错了!

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=,inf=0x3f3f3f3f;
int n,f[][],ans;//maxn*maxn!!
struct N{int t,e;}a[maxn];
bool cmp(N x,N y){return x.e>y.e;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d",&a[i].t,&a[i].e);
sort(a+,a+n+,cmp);
memset(f,0x3f,sizeof f);
// memset(f[0],0,sizeof f[0]);
f[][]=;//!
int lm=a[].t,d=;
for(int i=;i<=n;i++,lm+=a[i].t,d=!d)
for(int j=;j<=lm;j++)
{
// if(j>=a[i].t)
// f[d][j]=max(f[!d][j-a[i].t],j+a[i].e);
// if(f[!d][j])f[d][j]=min(f[d][j],max(f[!d][j],lm-j+a[i].e));//顺序?!
if(f[!d][j])f[d][j]=max(f[!d][j],lm-j+a[i].e);//if(f[!d][j])!
if(j>=a[i].t)
f[d][j]=min(f[d][j],max(f[!d][j-a[i].t],j+a[i].e));
}
d=!d;
ans=inf;
for(int j=;j<=lm;j++)ans=min(ans,f[d][j]);
printf("%d\n",ans);
return ;
}

最新文章

  1. 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化
  2. spring+IOC+DI+AOP优点分析(一)
  3. linux 安装python-setuptools
  4. CentOS 5系统安装Django、Apache 、mod_wsgi部署Python环境教程
  5. Mule ESB 社区版 企业版 资源下载 包含3.5和3.6
  6. web 模板 类似京东左侧的导航栏
  7. 为什么iphone手机比android手机流畅
  8. C# TextBox 换行 滚动到最后一行
  9. Android切换页面效果的实现一:WebView+ViewFlipper
  10. 暴力或随机-hdu-4712-Hamming Distance
  11. sql 时间格式
  12. Postfix+dovecot搭建简单邮箱服务器
  13. 帝国CMS系统标签e:loop调用的附加SQL条件和排序参数
  14. excle中表引用
  15. 容器化 RDS:你须要了解数据是怎样被写&amp;quot;坏&amp;quot;的
  16. swftools安装教程
  17. poj1088-滑雪 【dfs 记忆化搜索】
  18. 数据挖掘学习笔记——kaggle 数据预处理
  19. python模块之——tqdm(进度条)
  20. WSO2 API Manager中host Ip 不正确的问题解决方法

热门文章

  1. heap corruption detected VS2015 C语言 报错
  2. 【(待重做)树状数组+dp+离散化】Counting Sequences
  3. [K/3Cloud] 创建一个单据转换插件
  4. 莎拉公主的困惑(bzoj 2186)
  5. 【BZOJ4872】分手是祝愿(期望DP)
  6. 2.4 选择第k大的元素 selection
  7. [bzoj5379]Tree_dfs序_线段树_倍增lca
  8. html中布局,让下一个子元素占据剩余的高度
  9. centos 建立Clamav自动扫描脚本
  10. 【项目实战】---使用ajax完毕username是否存在异步校验