BZOJ 1569
来源:互联网 发布:bodog信誉第一js 编辑:程序博客网 时间:2024/04/29 18:56
这个题就是一个DP
F[I,J,K,P]表示在有I个员工 金钱是J 荣誉是K 距离发广告已经有P天的最小天数是多少
这个状态可以由 F[I-1{p=3) or i(p<3),*,*,MIN(P-1,0)] 推过来 里面俩个**指的是员工的分配方案,这个分配方案可以暴力枚举
在P=3的时候可员工人数多一个,并且可以转移到P=0 或者P=1
时间复杂度是O(最大员工数^2*x*y*4)
比较显然的是,我们不会招很多人,即使最坏情况,也最多只能找13个人,而在最坏情况下,并不可能招那么多,所以最大员工数在20+较为合理
所以时间完全足够
code
var f:array[0..35,0..25,0..25,0..5] of longint; x,y,z,a,b,aa,i,j,k,p,ans,xx,yy,ii,n,q:longint;function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end;procedure work(a1,b1,c1,d1:longint); begin if b1<0 then exit;if (b1>a) then b1:=a;if c1>b then c1:=b;f[a1,b1,c1,d1]:=min(f[a1,b1,c1,d1],f[i,j,k,p]+1); end;begin read(n,x,y,z,a,b);aa:=a; a:=a+z-min(a,z); for i:=0 to 30 do for j:=0 to a do for k:=0 to b do for p:=0 to 3 do f[i,j,k,p]:=maxlongint; f[n,0,0,0]:=0;ans:=1000; for i:=n to 34 do for p:=0 to 3 do for j:=0 to a do for k:=0 to b do begin if f[i,j,k,p]=maxlongint then continue;if (j>=aa) and (k>=b) then begin ans:=min(ans,f[i,j,k,p]);continue; end;if f[i,j,k,p]>ans then continue;for q:=0 to i do begin xx:=j+q*x;yy:=k+(i-q)*y;ii:=i;if p=3 then ii:=ii+1;if (p=0) or (p=3) then begin work(ii,xx,yy,0);work(ii,xx-z,yy,1); endelse work(ii,xx,yy,p+1); end; end; writeln(ans);end.
仰慕200B就AC的!!跪烂!!至今不会200B做法!
- BZOJ 1569
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- bzoj
- BZOJ
- BZOJ
- bzoj
- 存货计价方式
- 高效缓存地显示Bitmap图片 [ Lesson 0 - 章节概览 ]
- 网络通信协议
- 正则表达式30分钟入门教程
- ajax回调函数参数传递
- BZOJ 1569
- smarty中的高级特性(-) 对象的使用
- rabbitmq
- Linux系统中的sort命令。。
- 堆排序,希尔排序解析
- iPhone中沙盒的作用以及存取沙盒中的文件(图片)
- 彩票分类
- 线程句柄和线程ID的区别
- 手工配置DR、BDR,和已经形成的DR与BDR之间的切换。