书柜的尺寸(bzoj 1933)
Description
由于书柜的深度是固定的(显然,它应该等于那本最宽的书的长度),所以要求书柜的体积最小就是要求S最小。Tom离答案只有一步之遥了。不过很遗憾,Tom并不擅长于编程,于是他邀请你来帮助他解决这个问题。Input
Output
Sample Input
220 29
195 20
200 9
180 30
Sample Output
/*
这道题需要表示的状态特别多,所以不能直接写。
一个很巧妙的方法是将高度从大到小排序,那么每个集合的第一个元素的h就是最大h。
即使这样2100^3的复杂度也是不够的,我们可以考虑省去第三维(可以用总的减去前两维),然后转移时f表示最大高度之和就行了。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define N 80
#define M 2500
#define inf 1000000000
using namespace std;
int f[][M][M],n,m,sum[N];
struct node{
int h,t;
};node a[N];
bool cmp(const node&s1,const node&s2){
return s1.h>s2.h;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].h,&a[i].t);
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++){
sum[i]=sum[i-]+a[i].t;
m+=a[i].t;
}
memset(f,,sizeof(f));
int sta=;f[][][]=;
for(int i=;i<=n;i++){
sta^=;memset(f[sta],,sizeof(f[sta]));
for(int j=sum[i-];j>=;j--)
for(int k=sum[i-];k>=;k--){
int h=a[i].h,t=a[i].t;
if(j+k>sum[i-])continue;
if(f[sta^][j][k]>)continue;
if(!j) f[sta][t][k]=min(f[sta][t][k],f[sta^][j][k]+h);
else f[sta][j+t][k]=min(f[sta][j+t][k],f[sta^][j][k]);
if(!k) f[sta][j][t]=min(f[sta][j][t],f[sta^][j][k]+h);
else f[sta][j][k+t]=min(f[sta][j][k+t],f[sta^][j][k]);
if(sum[i-]==j+k) f[sta][j][k]=min(f[sta][j][k],f[sta^][j][k]+h);
else f[sta][j][k]=min(f[sta][j][k],f[sta^][j][k]);
}
}
int ans=inf;
for(int j=;j<=m;j++)
for(int k=;j+k<m;k++){
if(f[n&][j][k]>)continue;
ans=min(ans,max(max(j,k),m-j-k)*f[n&][j][k]);
}
printf("%d",ans);
return ;
}
书柜的尺寸(bzoj 1933)的更多相关文章
- BZOJ1933: [Shoi2007]Bookcase 书柜的尺寸
传送门 很容易看出来这是一道DP题,那么怎么设置状态就成了这道题的关键.本题有点特殊的地方是有两个维度的状态,而每个维度又有三个部分的参数,如果全部设置出来的话肯定会MLE.首先对书的厚度状态简化. ...
- BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 ——动态规划
状态设计的方法很巧妙,六个值 h1,h2,h3,t1,t2,t3,我们发现t1,t2,t3可以通过前缀和优化掉一维. 然后考虑把h留下还是t留下,如果留下h显然t是会发生改变的,一个int存不下. 如 ...
- BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸
神奇的dp优化. 考虑6维状态的dp,分别表示三行高和宽,显然MLE&&TLE. 把高排个序,从大到小往架上放,那么若不是重开一行便对高度没有影响. 然后求出宽度的sum,dp[i][ ...
- [Shoi2007]Bookcase 书柜的尺寸 dp
这道dp算是同类型dp中比较难的了,主要难点在于设置状态上: 如果像平时那样设置,必定爆空间没商量: 下面是一种思路: 先把输入进来的数据按h从大到小排序,这样就可以大大减少状态数, 然后设f[i][ ...
- [SHOI2007] 书柜的尺寸 思维题+Dp+空间优化
Online Judge:Luogu-P2160 Label:思维题,Dp,空间优化 题面: 题目描述 给\(N\)本书,每本书有高度\(Hi\),厚度\(Ti\).要摆在一个三层的书架上. 书架的宽 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 土地购买 usaco 斜率优化
看这道题的时候,感觉很难,因为数据范围比较大,很难dp: 后来想到了[书柜的尺寸]这道题,也是一道dp,曾经看了那道题的题解而深有启发: 这道题每组的付费只与这一组长宽的最大值有关,也就是说要分组,一 ...
- [题解]bzoj 1861 Book 书架 - Splay
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1396 Solved: 803[Submit][Stat ...
- 【刷题】BZOJ 3140 [Hnoi2013]消毒
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立 ...
随机推荐
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- ApacheCommons的Java公共类库(实现如Log这些功能)
Apache Commons是Apache软件基金会的项目,曾隶属于Jakarta项目.Commons的目的是提供可重用的.开源的Java代码. 解释:http://baike.baidu.com/i ...
- phpunit 测试框架安装
PHPUnit是一个轻量级的PHP测试框架.它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计).来自百度百科 一.下载wg ...
- 一个将 footer 保持在底部的最好方法
原文: Quick Tip: The Best Way To Make Sticky Footers 当你在布局网页时,有可能会遇到类似下面的这种情况 导致这一问题的原因是页面内容太少,无法将内容区域 ...
- django的cookie和session以及内置信号、缓存
cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...
- maven管理本地jar包注意事项
今天lucene中集成第三方中文分词器IKAnalyzer的时候遇到了相似的问题:lucene版本4.9.IKAnalyzer版本2012FF_hf1 直接去maven仓库下载,pom配置如下: &l ...
- UVA 624CD(01背包输出 + 输出路径)
You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is o ...
- Struts2--属性设置方式
Struts2自动获取/设置数据的方式一共分为两种 属性驱动(FieldDriven) 模型驱动(ModelDriven) 属性驱动 属性又分为两种: |- 基本数据类型 |- JavaBean属性类 ...
- App Extension访问Cocoapods引入的第三方库
步骤一: PROJECT --info --configurations,将对应的Debug和Release 设置成pods.debug和pods.release 步骤2:编译一下(本人遇到的问 ...
- keras安装
找对工具真的很重要,周末和学霸折腾了一天才装了几个包,问了同事找了一个方便的包,装起来不要太快啊.二十分钟全部搞定. 一.Anaconda 真是大杀器,牛到飞起来,一键部署,所有常用的机器学习包全部包 ...