【洛谷P2577】[ZJOI2005]午餐】的更多相关文章

次元传送门:洛谷P2577 思路 首先贪心是必须的 我们能感性地理解出吃饭慢的必须先吃饭(结合一下生活) 因此我们可以先按吃饭时间从大到小排序 然后就能自然地想到用f[i][j][k]表示前i个人在第一个窗口排队用了j时间 在第二个窗口排队用了k时间 然后就自然地炸空间了 所以我们要降维 因为我们可以由第一个窗口推出第二个窗口所用时间 所以我们可以改原来的数组为: f[i][j]表示前i个人 在第一个窗口用了j时间 得到的所有前i个人吃完饭的最短时间 如何用第一个窗口推出第二个窗口呢? 显而易见…
P2577 [ZJOI2005]午餐 )逼着自己做DP 题意: 有n个人打饭,每个人都有打饭时间和吃饭时间.有两个打饭窗口,问如何安排可以使得总用时最少. 思路: 1)可以发现吃饭时间最长的要先打饭.(我也是看别人题解才知道) 2)然后就是对于前i个人,他不是在一号窗口打饭,就是在二号窗口打饭.所以用dp[i][j]表示前i个人,在一号窗口打饭j时间的总用时.因为dp[i][k = sum - j] 就表示前i个人在二号窗口用时k的总用时. #include <algorithm> #incl…
洛谷题目链接:[ZJOI2005]午餐 题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的.另外每个人吃饭的速度也不尽相同,所以吃饭花费的时间也是可能有所不同的. THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队…
正解:序列dp 解题报告: 传送门! 这题首先要想到一个显然的贪心:每个窗口的排队顺序都是按照吃饭时间从大到小排序的 证明如下: 这种贪心通常都是用微扰法,这题也不例外 现在假如已经确定了每个窗口有哪些人辣,那就是要排除最优顺序使得吃完饭的时间最短 因为两个窗口直接互不影响,所以可以先单独抽出一个窗口来看,就相当于只有一个窗口了 然后选取两个人x,y,设a表示排队时间b表示吃饭时间,令b[x]>b[y] 于是可以列出式子 对于x排在前面,T1=a[x]+max(b[x],a[y]+b[y]) 对…
这道题目比较难想. 题解: 算法:贪心+dp 容易想到贪心:吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序. 然后就是dp了: 首先,应该想到f[i][j][k]:前i个人,在1号窗口打饭总时间j,在2号窗口打饭总时间k 当然,这样会爆空间,所以想到去掉一维. f[i][j]表示前i个人,在1号窗口打饭总时间j,最早吃完饭的时间 我们可以发现 j+k=前i个人打饭总和,k = sum(i)-j. 所以可以维护一个前缀和: for(int i = 1; i <= n; i++) sum…
每日一题 day56 打卡 Analysis 算法:贪心+dp 容易想到贪心:吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序. 然后就是dp了: 首先,应该想到f[i][j][k]:前i个人,在1号窗口打饭总时间j,在2号窗口打饭总时间k 当然,这样会爆空间,所以想到去掉一维. f[i][j]表示前i个人,在1号窗口打饭总时间j,最早吃完饭的时间 我们可以发现 j+k=前i个人打饭总和,k = sum(i)-j. 所以可以维护一个前缀和. #include<iostream> #i…
BZOJ原题链接 洛谷原题链接 解决这题得先想到一个贪心:吃饭慢的先排队. 并不会证明(感觉显然 设\(f[i][j][k]\)表示已经排好了前\(i\)人,第一个队伍需要花费的打饭时间为\(j\),第二个队伍需要花费的打饭时间为\(k\),最后一个吃完饭的时刻. 显然这会\(MLE\)(滚动数组也救不了你 实际上,我们可以将\(k\)这一维舍去.设\(S[i]\)表示前\(i\)个人打饭所需要的时间,即前缀和. 则当安排了前\(i\)个人,其中第一个队伍需要花费打饭的时间为\(j\),那么第二…
题目:https://www.luogu.org/problemnew/show/P2577 可以从只有一个窗口的角度思考出一个贪心结论.就是应当按吃饭时间(不算打饭时间)从大到小排序.这样交换相邻两个不会使答案更优,因为交换的话对其他人无影响,而吃饭时间长的那个人打到饭的时间也靠后了. 记录第一个窗口打完饭的时间在状态里.已知前 i 个人打饭时间和,能算出来第二个窗口打完饭的时间.所以值就可以记录总共的最晚结束时间了!也因为最晚结束时间对于打完饭的时间不是关系很紧密的,所以需要把第一个窗口的所…
P2577 [ZJOI2005]午餐 题面 题目描述 上午的训练结束了, \(THU \ ACM\) 小组集体去吃午餐,他们一行 \(N\) 人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的.另外每个人吃饭的速度也不尽相同,所以吃饭花费的时间也是可能有所不同的. \(THU \ ACM\) 小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍…
午餐 题目链接 DP题都辣么毒瘤的么.. 首先,看一下题解 我们就有了思路: 贪心:显然,让吃饭慢的先打饭,sort一遍(证明?不存在的.. DP:f[i][j][k]表示前i个人,窗口1的打饭时间为j,窗口2的打饭时间为k的最早吃完饭的时间 对于每个人,有两种方案:1.在窗口1打饭 2.在窗口2打饭 (废话) a[i].ti为第i个人的打饭时间,a[i].t2为第i个人的吃饭时间 f[i][j][k]=max(f[i-1][j-a[i].t1][k],j+a[i].t2); //排在第一个窗口…