Bzoj1933 [Shoi2007]Bookcase 书柜的尺寸
Submit: 554 Solved: 212
Description
Input
Output
Sample Input
220 29
195 20
200 9
180 30
Sample Output
HINT
Source
Day2
动态规划
看上去并不卡时间而是卡空间?
f[当前处理的书i][第一层宽度j][第二层宽度k][第三层宽度l]=总高度
发现宽度前缀和-j-k可以算出第三层宽度l,那么这一维可以去掉。第一维可以滚动优化去掉。现在空间够用了。
将书本按高度从大到小排序,发现只有在某一层第一次放书时需要累加高度。
注意每一层至少放一本书。←看漏这个条件,调了好久
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<vector> 8 using namespace std; 9 const int mxn=105; 10 int read(){ 11 int x=0,f=1;char ch=getchar(); 12 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 14 return x*f; 15 } 16 int f[2][2110][2110]; 17 int smm[mxn]; 18 struct node{ 19 int h,t; 20 }a[mxn]; 21 int cmp(node a,node b){ 22 return a.h>b.h; 23 } 24 int n; 25 void solve(){ 26 memset(f,0x3f,sizeof f); 27 int i,j,k; 28 int tmp=1,nxt=0; 29 f[0][0][0]=0; 30 for(i=1;i<=n;i++){//枚举书本 31 tmp^=1; 32 nxt^=1; 33 memset(f[nxt],0x3f,sizeof f[nxt]); 34 for(j=smm[i-1];j>=0;j--){ 35 for(k=smm[i-1]-j;k>=0;k--){ 36 if(f[tmp][j][k]==0x3f3f3f3f)continue; 37 if(j+k>smm[i-1])break; 38 if(!j)f[nxt][j+a[i].t][k]=min(f[nxt][j+a[i].t][k],f[tmp][j][k]+a[i].h); 39 else f[nxt][j+a[i].t][k]=min(f[nxt][j+a[i].t][k],f[tmp][j][k]); 40 // 41 if(!k)f[nxt][j][k+a[i].t]=min(f[nxt][j][k+a[i].t],f[tmp][j][k]+a[i].h); 42 else f[nxt][j][k+a[i].t]=min(f[nxt][j][k+a[i].t],f[tmp][j][k]); 43 // 44 if(j+k==smm[i-1]) 45 f[nxt][j][k]=min(f[nxt][j][k],f[tmp][j][k]+a[i].h); 46 else 47 f[nxt][j][k]=min(f[nxt][j][k],f[tmp][j][k]); 48 } 49 } 50 51 } 52 int ans=0x3f3f3f3f; 53 for(j=1;j<=smm[n];j++){ 54 for(k=smm[n]-j;k;k--){ 55 if(f[nxt][j][k]>=0x3f3f3f3f || j+k>=smm[n])continue; 56 ans=min(ans,max(j,max(k,smm[n]-j-k))*f[nxt][j][k]); 57 } 58 } 59 printf("%d\n",ans); 60 return; 61 } 62 int main(){ 63 int i,j; 64 n=read(); 65 for(i=1;i<=n;i++){ 66 a[i].h=read(); 67 a[i].t=read(); 68 } 69 sort(a+1,a+n+1,cmp); 70 for(i=1;i<=n;i++)smm[i]=smm[i-1]+a[i].t; 71 solve(); 72 return 0; 73 }
转载于:https://www.cnblogs.com/SilverNebula/p/6509888.html
Bzoj1933 [Shoi2007]Bookcase 书柜的尺寸相关推荐
- bzoj1933: [Shoi2007]Bookcase 书柜的尺寸
传送门 S前面那一坨就是max(hi) 然后就是大力dp 设f[i][j][k]表示前i本书,第一层长度和为j,第二层长度和为k的最小第三层长度. 显然可以滚掉一维 转移十分简单. #include& ...
- [BZOJ1933][Shoi2007]Bookcase 书柜的尺寸(DP)
看到层数只有33,可以推断DP模型的维数一定和33有关. 一个模型:f[i][j][k]f[i][j][k]表示到了第ii本书,第11行的厚度之和为jj,第22行的厚度之和为kk时的最小总高度. 但这 ...
- BZOJ 1933 Shoi2007 Bookcase 书柜的尺寸
1933: [Shoi2007]Bookcase 书柜的尺寸 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 638 Solved: 251 [Subm ...
- BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 动态规划
Description Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书.Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了.显然,这种书柜不能太大 ,T ...
- [BZOJ]1933: [Shoi2007]Bookcase 书柜的尺寸 DP
Description Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书.Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了.显然,这种书柜不能太大,To ...
- [Shoi2007]Bookcase 书柜的尺寸 dp
这道dp算是同类型dp中比较难的了,主要难点在于设置状态上: 如果像平时那样设置,必定爆空间没商量: 下面是一种思路: 先把输入进来的数据按h从大到小排序,这样就可以大大减少状态数, 然后设f[i][ ...
- BZOJ 1933 [Shoi2007] Bookcase 书柜的尺寸
Description Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书.Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了.显然,这种书柜不能太大,To ...
- BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸
神奇的dp优化. 考虑6维状态的dp,分别表示三行高和宽,显然MLE&&TLE. 把高排个序,从大到小往架上放,那么若不是重开一行便对高度没有影响. 然后求出宽度的sum,dp[i][ ...
- BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 ——动态规划
状态设计的方法很巧妙,六个值 h1,h2,h3,t1,t2,t3,我们发现t1,t2,t3可以通过前缀和优化掉一维. 然后考虑把h留下还是t留下,如果留下h显然t是会发生改变的,一个int存不下. 如 ...
最新文章
- 洛谷P1162 填涂颜色
- WNetAddConnection2 映射网络驱动器
- Hadoop下载和源码阅读
- 扫地机器人滤网顺序_1分钟小课堂:扫地机器人滤网多久换一次?
- webug第十二关:我系统密码忘记了!
- 利用VmWare_在本地内网IP地址段_搭建Centos7测试MyCat集群_亲测---Linux工作笔记044
- 普通音箱实现成为无线音箱
- Odoo-----在Form视图中添加Chatter
- PHP fpdi合并多个PDF文件,取多个PDF特定页数合并以及导出
- NLP相关书籍和论文综述
- html5 单个按钮控制音乐播放,HTML5音频控制停止按钮(而不是暂停)
- jquery.validate.min.js使用介绍
- Linux下的top命令PR,NI,VIRT,RES,SHR,S的解释
- 【河南省多校脸萌第六场 A】分班级
- 学生信息的那些操作:不知姓,也能查
- linux下进入bios设置u盘启动项,u盘启动g4l_u盘启动快捷键_bios设置u盘启动
- 十分钟辨清锁存器与Rs触发器
- 颜值爆表,Redis官方可视化工具来啦,功能很强大~
- MD5算法已经被破解
- 整型数据在内存中的存储方式大解密