BZOJP1899ZJOI2004
老早的一道水题
题意:
上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂。这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭。由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的。另外每个人吃饭的速度也不尽相同,所以吃饭花费的时间也是可能有所不同的。
THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队打饭。每个人打完饭后立刻开始吃,所有人都吃完饭后立刻集合去六教地下室进行下午的训练。
现在给定了每个人的打饭时间和吃饭时间,要求安排一种最佳的分队和排队方案使得所有人都吃完饭的时间尽量早。
假设THU ACM小组在时刻0到达十食堂,而且食堂里面没有其他吃饭的同学(只有打饭的师傅)。每个人必须而且只能被分在一个队伍里。两个窗口是并行操作互不影响的,而且每个人打饭的时间是和窗口无关的,打完饭之后立刻就开始吃饭,中间没有延迟。
现在给定N个人各自的打饭时间和吃饭时间,要求输出最佳方案下所有人吃完饭的时刻。
数据范围:
所有输入均小于100
题解:
首先能发现这题给了两个队伍很容易想到dp
但发现人的顺序不知道,思考一下能发现这显然是一个贪心,将吃饭吃的慢的人排在前面
之后就可以dp了,用f[i,j,k]表示第i个人,第1条队伍等待时间为j,第二条队伍等待时间为k,所需的最少结束时间
但发现这是超时的
优化很简单,考虑前缀和sum[i]=j+k,所以只需记录其中一维即可
代码:
#include <bits/stdc++.h>
using namespace std;
#define INF 99999999
struct re{int a,b;}a[];
bool cmp(re a,re b)
{
return(a.b>b.b);
};
int n,m,f[][],sum[];
int main(){
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
cin>>n;
for (int i=;i<=n;i++)
cin>>a[i].a>>a[i].b;
sort(a+,a+n+,cmp);
for (int i=;i<=n;i++)
sum[i]=sum[i-]+a[i].a;
for (int i=;i<=;i++)
for (int j=;j<=;j++)
f[i][j]=INF;
f[][]=;
for (int i=;i<=n;i++)
for (int j=;j<=sum[i];j++)
{
if (j>=a[i].a) f[i][j]=min(f[i][j],max(f[i-][j-a[i].a],j+a[i].b));
if (sum[i]-j>=a[i].a) f[i][j]=min(f[i][j],max(f[i-][j],sum[i]-j+a[i].b));
}
int minn=INF;
for (int i=;i<=sum[n];i++)
minn=min(minn,f[n][i]);
cout<<minn;
return();
}
BZOJP1899ZJOI2004的更多相关文章
随机推荐
- Jupyter 魔术命令(magic commands)
自动重新加载更改的模块 命令参数如下所示: %autoreload: 自动重载%aimport排除的模块之外的所有模块. %autoreload 0: 禁用自动重载 %autoreload 1: 自动 ...
- python 代码模板
命令[python3 -m pydoc -p 1234] 通过http://localhost:1234来访问查看文档 # -*- coding: utf-8 -*-""&qu ...
- 996ICU与程序猿的个人成长
目录 规划 学习 专业领域知识 知识广度 第二职业 理财 借势 添砖加瓦 最近一段时间,996ICU在互联网界引发"大地震",从普通员工.行业大佬甚至官媒都进行了发声,大家对这个问 ...
- CopyFromScreen在屏幕缩放情况下需要做处理
using System; using System.Drawing; using System.Runtime.InteropServices; //这段代码转自网上 namespace Syste ...
- JacobMathType
JACOB是一个 Java到微软的COM接口的桥梁.使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象,;MathType 是由美国Design Science公司开 ...
- dijkstra补充
dijkstra主要写法: priority_queue<pair<int,int> >q; //大根堆 //dis第一维为dis的相反数 void dijkstra(){ m ...
- Asp.net MVC Session过期异常的处理
一.使用MVC中的Filter来对Session进行验证 (1)方法1: public class MyAuthorizeAttribute : FilterAttribute, IAuthoriza ...
- tensorflow神经网络拟合非线性函数与操作指南
本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- ...
- mysql 查询优化 ~explain解读之select_type的解读
一 简介:今天咱们来聊聊explain的select_type 二 类型 (1)SIMPLE 简单的SELECT语句(不包括UNION操作或子查询操作) (2)PRIMARY/UNION PRIMAR ...
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...