[codevs2467]午餐 排序+dp+部分贪心
2015-09-28 08:08
423 查看
首先对所有的人按照B[I]降序排列、
F[I,J]表示在第I个人、在第一个窗口花费J时间打饭、 I个人吃饭所需要的最小值
楼主dp真的很弱~~~写了好多遍也没对,最后发现初值付错2333
一定要注意,dp中除了f[0][0]外全部付成max(当然不要127容易爆,125足矣);
贴上代码,感觉容易多了
喜欢就收藏一下,vic私人qq:1064864324,加我一起讨论问题,一起进步^-^
F[I,J]表示在第I个人、在第一个窗口花费J时间打饭、 I个人吃饭所需要的最小值
楼主dp真的很弱~~~写了好多遍也没对,最后发现初值付错2333
一定要注意,dp中除了f[0][0]外全部付成max(当然不要127容易爆,125足矣);
贴上代码,感觉容易多了
const maxn=233; var i,j,n,ans:longint; a,b:array[0..maxn] of longint; s:array[0..maxn] of longint; f:array[0..maxn,0..maxn*maxn] of longint; function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end; function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end; procedure swap(var a,b:integer); var t:longint; begin t:=a; a:=b; b:=t; end; procedure qsort(l,r: longint); var i,j,x:longint; begin i:=l; j:=r; x:=b[(l+r) div 2]; repeat while b[i]>x do inc(i); while x>b[j] do dec(j); if not(i>j) then begin swap(a[i],a[j]); swap(b[i],b[j]); inc(i); j:=j-1; end; until i>j; if l<j then qsort(l,j); if i<r then qsort(i,r); end; begin readln(n); for i:=1 to n do readln(a[i],b[i]); qsort(1,n); for i:=1 to n do s[i]:=s[i-1]+a[i]; fillchar(f,sizeof(f),125); f[0,0]:=0; for i:=1 to n do for j:=0 to s[i] do begin if j>=a[i] then f[i,j]:=min(f[i,j], max(max(j+b[i],f[i-1,j-a[i]]),s[i]-j)); f[i,j]:=min(f[i,j],max(max(f[i-1,j],s[i]-j+b[i]),j)); end; ans:=maxlongint; for i:=0 to s do ans:=min(ans,f[n,i]); writeln(ans); end.
喜欢就收藏一下,vic私人qq:1064864324,加我一起讨论问题,一起进步^-^
相关文章推荐
- 个人简历制作工具V1.09
- Win10正式版内置应用问题多 希望TH2能重点修复
- 图片路径问题
- 机房收费系统常见问题
- OpenCV原则解读HAAR+Adaboost
- Java程序,取随机数的两种实现方法
- Intel MCE CMCI (一) 概述
- 史上最全微软官方版 Win10各版本激活方式大全
- Android循序渐进 - 2.1 View与ViewGroup
- 网络与信息安全监控内容
- 第六章 用户帐号和组管理
- 网络信息安全防范体系以及设计原则
- Unity3D中js与C#之间相互调用的解决办法
- CSS 框模型概述
- Unity中js语言使用注意
- 《高性能MySQL》读书笔记
- 灰盒测试
- unity官方demo学习之Stealth(六)CCTV监控摄像机
- TCP三次握手详解及释放连接过程
- 同行评审的概括