【BZOJ1899】午餐(动态规划)

题面

BZOJ

题解

我太弱了

这种\(dp\)完全做不动。。

首先,感性理解一些

如果所有人都要早点走,

那么,吃饭时间长的就先吃

吃饭时间短的就晚点吃

所以,按照吃饭时间排序

我们不难得出一个每个人吃完饭的时间

之和前面所有人的打饭的时间和有关

所以

\(f[i][j][k]\)表示当前做到第\(i\)个人,第一列,第二列前面的人的打饭时间之和分别为\(j,k\)时,最后一个人吃完饭的最小时间

因为人的顺序我们是知道的

所以\(j+k\)是一个定值,是所有人打饭时间的前缀和

因此我们只需要记录其中一个

所以,状态是\(f[i][j]\)表示当前做到第\(i\)个人,

第一列队伍前面所有人打饭的时间和是\(j\)时

最后一个人吃完饭的最小时间

如果把这个人放在第一列

\(f[i][j]=min(f[i][j],max(f[i-1][j-Get[i]],j+eat[i]))\)

这个应该不难理解

另外一个,把这个人放在第二列

\(f[i][j]=max(f[i-1][j],sum[i]-j+eat[i])\)

这题应该是一个很显然的\(dp\)

但是我却做不出来

我果然太弱了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MAX 210
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
struct Peo{int a,b;}p[MAX];
int s[MAX],ans=2e9;
int f[MAX][MAX*MAX],n;
bool operator<(Peo a,Peo b)
{
if(a.b!=b.b)return a.b>b.b;
else return a.a>b.a;
}
int main()
{
n=read();
for(int i=1;i<=n;++i)p[i].a=read(),p[i].b=read();
sort(&p[1],&p[n+1]);
for(int i=1;i<=n;++i)s[i]=s[i-1]+p[i].a;
memset(f,63,sizeof(f));
f[0][0]=0;
for(int i=1;i<=n;++i)
{
for(int j=s[i-1];j>=0;--j)
{
f[i][j+p[i].a]=min(f[i][j+p[i].a],max(f[i-1][j],j+p[i].a+p[i].b));
f[i][j]=max(f[i-1][j],s[i-1]-j+p[i].a+p[i].b);
}
}
for(int i=0;i<=s[n];++i)ans=min(f[n][i],ans);
printf("%d\n",ans);
return 0;
}

【BZOJ1899】午餐(动态规划)的更多相关文章

  1. luogu2577/bzoj1899 午餐 (贪心+dp)

    首先,应该尽量让吃饭慢的排在前面,先按这个排个序 然后再来决定每个人到底去哪边 设f[i][j]是做到了第i个人,然后1号窗口目前的总排队时间是j,目前的最大总时间 有这个i和j的话,再预处理出前i个 ...

  2. Luogu 2577[ZJOI2005]午餐 - 动态规划

    Solution 啊... 我太菜了唔 不看题解是不可能的, 这辈子都不可能的. 首先一个队伍中排队轮到某个人的时间是递增的, 又要加上吃饭时间, 所以只能使吃饭时间递减, 才能满足最优,于是以吃饭时 ...

  3. 【BZOJ1899】[Zjoi2004]Lunch 午餐 贪心+DP

    [BZOJ1899][Zjoi2004]Lunch 午餐 Description 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时 ...

  4. 【bzoj1899】[Zjoi2004]Lunch 午餐(贪心+dp)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1899 显然为了节省时间,吃饭慢的人要先打饭.于是我们可以先把所有人按吃饭时间排序,于是 ...

  5. [BZOJ1899]Lunch 午餐(DP)

    [BZOJ1899] 首先有个很贪心的思路,吃饭时间长的最先打饭为最优,所以开始先排个序 然后考虑DP,我们不需要知道某个人在哪个对,只要关注总的时间就行了 肯定需要一维表示当前同学编号,还需要表示某 ...

  6. 【bzoj1899】[Zjoi2004]Lunch 午餐 dp

    题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各 ...

  7. [ZJOI2005]午餐 (贪心,动态规划)

    题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各 ...

  8. Bzoj1899: [Zjoi2004]Lunch 午餐

    题面 传送门 Sol 首先显然吃饭久的要排在前面 之后再来分配队伍,设\(f[i][j]\)表示到第\(i\)个人,\(A\)队伍要等\(j\)的最小吃完饭时间 那么就是一个简单的背包吧... # i ...

  9. [BZOJ1899][ZJOI2004]Lunch 午餐 (DP)

    比较水的DP 但是比较难想 整体思路还是很好理解的 在洛谷的题解里有一个一维的 > 什么时候去看一下 下面发我的代码 #include<bits/stdc++.h> #define ...

随机推荐

  1. WPF项目学习.三

    工具代码记录 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案. 分页控件的制作,邮件发送,日志代码,excel导入导出等代码的实现过程: 二 ...

  2. mysql cp复制和mysqldump备份测试

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 备份策略 针对不同的场景下, 我们应该制定不同的备份策略对数据库进行 ...

  3. sql server两个时间段内,求出周末的量

    公司有个表记录了出差(加班)的初始时间和截止时间,现在要计算出加班时间,之前的设计并没有考虑到这部分,因此本人通过sql重新计算周末数 表formmain starttime endtime 使用游标 ...

  4. 正则表达式的方法:replace,match,test(replace参数可以是回调函数)

    1.replace: 作用对象:字符串 功能:用于替换字符串中的某些字符 参数:(1)正则表达式 (2)要替换的字符串 或者 回调函数 var str="1 2 3 4 5 6 7 8 9& ...

  5. lnmp HTTP ERROR 500

    http://www.cnblogs.com/thrillerz/p/4725409.html

  6. aforge 学习-基本图像处理要用的类库

    1.图像灰度化:Grayscale.CommonAlgorithms.BT709(3种) FiltersSequence =new  FiltersSequence(数组处理函数): 2.二值化(阈值 ...

  7. UVA - 658 最短路

    思路:通过前后两种状态建立一条边,利用Dijsktra就可以做了. 注意利用二进制优化. AC代码 #include <cstdio> #include <cmath> #in ...

  8. postman 中调试接口的小记录

    1.form-data:  就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开.既可以上传键值对,也可以上传文件.当上传的字段是文件 ...

  9. [Code] 递归函数在函数式 Java 中的实现

    这里以阶乘函数为例,对于阶乘函数 fact :: Integer -> Integer fact 0 = 1 fact n = n * fact (n - 1) 在函数式 Java 中可以使用 ...

  10. ThinkPad W500 清灰记录

    转载请注明出处:HateMath归来(http://www.cnblogs.com/hatemath/) 看型号就知道,这是一台英雄迟暮型的老电脑.到了夏天,启动后啥事不做,通风口都烫手.心情好,一时 ...