Description

Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书。Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了。显然,这种书柜不能太大,Tom希望它的体积越小越好。另外,出于他的审美要求,他只想要一个三层的书柜。为了物尽其用,Tom规定每层必须至少放一本书。现在的问题是,Tom怎么分配他的工具书,才能让木匠造出最小的书柜来呢? Tom很快意识到这是一个数学问题。每本书都有自己的高度hi和厚度ti。我们需要求的是一个分配方案,也就是要求把所有的书分配在S1、S2和S3三个非空集合里面的一个,不重复也不遗漏,那么,很明显,书柜正面表面积(S)的计算公式就是: 由于书柜的深度是固定的(显然,它应该等于那本最宽的书的长度),所以要求书柜的体积最小就是要求S最小。Tom离答案只有一步之遥了。不过很遗憾,Tom并不擅长于编程,于是他邀请你来帮助他解决这个问题。

题解:

显然要先排序,使得后面的不影响前面的,状态设计比较巧妙,主要是需要注意到h、t都比较小,才能设计出。f[i][j][k]f[i][j][k]表示到前i本书,第一层宽度为j,第二层宽度为k的最小高度,实际上第三层的宽度为sum[i]-j-k。然后第一维需要滚动,转移就直接转移就好了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int Maxn=2105;
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f;
}
int f[2][Maxn][Maxn],n,sum[75];
struct book{int h,t;}a[75];
bool cmp(book a,book b){return a.h>b.h;}
int main()
{memset(f[0],63,sizeof(f[0]));n=read();for(int i=1;i<=n;i++)a[i].h=read(),a[i].t=read();sort(a+1,a+1+n,cmp);sum[0]=0;for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i].t;f[0][0][0]=0;int now=0,ans=2147483647;for(int i=1;i<=n;i++){now^=1;memset(f[now],63,sizeof(f[now]));for(int j=0;j<=sum[i-1];j++)for(int k=0;k<=sum[i-1]-j;k++)if(f[now^1][j][k]!=1061109567){int l=sum[i-1]-j-k;f[now][j+a[i].t][k]=min(f[now][j+a[i].t][k],f[now^1][j][k]+((j==0)?a[i].h:0));f[now][j][k+a[i].t]=min(f[now][j][k+a[i].t],f[now^1][j][k]+((k==0)?a[i].h:0));f[now][j][k]=min(f[now][j][k],f[now^1][j][k]+((l==0)?a[i].h:0));}}for(int j=1;j<=sum[n];j++)for(int k=1;k<=sum[n]-j;k++){int l=sum[n]-j-k;if(l<=0)continue;if(f[now][j][k]!=1061109567)ans=min(ans,f[now][j][k]*max(max(j,k),l));}printf("%d",ans);
}

[BZOJ]1933: [Shoi2007]Bookcase 书柜的尺寸 DP相关推荐

  1. BZOJ 1933 Shoi2007 Bookcase 书柜的尺寸

    1933: [Shoi2007]Bookcase 书柜的尺寸 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 638  Solved: 251 [Subm ...

  2. BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 动态规划

    Description Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书.Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了.显然,这种书柜不能太大 ,T ...

  3. BZOJ 1933 [Shoi2007] Bookcase 书柜的尺寸

    Description Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书.Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了.显然,这种书柜不能太大,To ...

  4. BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸

    神奇的dp优化. 考虑6维状态的dp,分别表示三行高和宽,显然MLE&&TLE. 把高排个序,从大到小往架上放,那么若不是重开一行便对高度没有影响. 然后求出宽度的sum,dp[i][ ...

  5. BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 ——动态规划

    状态设计的方法很巧妙,六个值 h1,h2,h3,t1,t2,t3,我们发现t1,t2,t3可以通过前缀和优化掉一维. 然后考虑把h留下还是t留下,如果留下h显然t是会发生改变的,一个int存不下. 如 ...

  6. bzoj 1933: [Shoi2007]Bookcase 书柜的尺寸

    题意:给出n本书的高度和厚度,把它们放在三行的书架上(每一行至少一本书),问书架正面的最小面积. 题解:先按高度从大到小排序,保证后面加入的书不会对高度造成影响,再dp.f[i][j][k]f[i][ ...

  7. [Shoi2007]Bookcase 书柜的尺寸 dp

    这道dp算是同类型dp中比较难的了,主要难点在于设置状态上: 如果像平时那样设置,必定爆空间没商量: 下面是一种思路: 先把输入进来的数据按h从大到小排序,这样就可以大大减少状态数, 然后设f[i][ ...

  8. [BZOJ1933][Shoi2007]Bookcase 书柜的尺寸(DP)

    看到层数只有33,可以推断DP模型的维数一定和33有关. 一个模型:f[i][j][k]f[i][j][k]表示到了第ii本书,第11行的厚度之和为jj,第22行的厚度之和为kk时的最小总高度. 但这 ...

  9. bzoj1933: [Shoi2007]Bookcase 书柜的尺寸

    传送门 S前面那一坨就是max(hi) 然后就是大力dp 设f[i][j][k]表示前i本书,第一层长度和为j,第二层长度和为k的最小第三层长度. 显然可以滚掉一维 转移十分简单. #include& ...

最新文章

  1. “醒事”就在一瞬间 --- 一个真实的故事 (文PPT)
  2. python三国演义人物出场统计_python爬取三国演义文本
  3. java newfile() bug_java初学者小白?遇到BUG就慌了?有关java异常的十大问题详解!...
  4. hibernate优化笔记(随时更新)
  5. c语言编写的键盘记录程序,C程序读取键盘码的方法
  6. 从第一范式(2nf)到第二范式(3nf)_关系数据模型-范式
  7. 支付宝对应APPID
  8. 凯恩帝串口通信怎么设置_北京凯恩帝(KND)-100M数控系统操作经验与技巧
  9. 如何给文件夹自定义图标?
  10. 【程序员金典】字符串互异
  11. bugzilla安装
  12. 什么是IT行业? IT行业都有哪些职位?
  13. apk 泊车摄像头_【精】申精,两厢黑色嘉年华安装导航摄像头倒车影像作业,俺系小黑...
  14. java winrar_Java使用winrar解压缩 | 学步园
  15. 【ML从入门到入土系列01】概述
  16. 1.2 电流和电压的参考方向
  17. flask 智能图灵机器人
  18. 蓝桥杯 小朋友崇拜圈 C语言
  19. 同构数怎么判断_编程:输入1-100以内的一个整数,判断这个数是否是同构数。输出不同的情况...
  20. 光遇为什么显示服务器连接错误,光遇服务器错误怎么办 光遇服务器错误问题解决办法-游侠手游...

热门文章

  1. 分层抽样不按比例如何加权_分层抽样的公式怎么计?
  2. (常用)configparser,hashlib,hamc模块
  3. brew install 和 brew cask install 的区别
  4. 魔兽世界怀旧服2020年最新服务器列表,2020年2月15日魔兽世界怀旧服服务器的排队等待时间的真实数据...
  5. 炉石android更新日志,炉石传说新版本一览_炉石传说更新内容
  6. 致青春(诉秋语 韵秋心)
  7. 绘画教程:女生伤心眼泪、哭泣表情的画法技巧
  8. JS的面向对象二(通过构造函数的方式)
  9. MySQL 8.0.16安装教程(windows 64位)
  10. 订单系统设计 --- 订单中心存储方案