传送门

题目大意

给你一些书的高度和宽度,有一个一列三行书柜,要求放进去书后,三行书柜的高的和乘以书柜的宽度最小。问这个值最小是多少。

分析

我们可以先将所有书按照高度降序排好,这样对于每一层只要放过书高度边不会改变。我们设第一本书放在第一层,用dp[i][j][k]表示考虑到第i个,第二层的厚度为j,第三层的厚度为k的情况时书架的最小总高度是多少,如果j或k是0则代表这一层以前没放过书,然后根据这个转移就行了。由于空间不够我们使用滚动数组。注意由于至少有三本书,所以每一层至少会放一个(这样可以使答案更优)。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define gmin(x,y) x=min(x,y)
const int inf = 0x3f3f3f3f;
struct node {
int h,w;
};
node d[];
int dp[][][],maxw[];
inline bool cmp(const node x,const node y){return x.h>y.h;}
int main(){
int n,m,i,j,k,t;
scanf("%d",&t);
while(t--){
memset(maxw,,sizeof(maxw));
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d%d",&d[i].h,&d[i].w);
}
sort(d+,d+n+,cmp);
maxw[]=d[].w;
for(i=;i<=n;i++)
maxw[i]=maxw[i-]+d[i].w;
int now=;
memset(dp[now],0x3f,sizeof(dp[now]));
dp[now][][]=d[].h;
for(i=;i<=n;i++){
now^=;
memset(dp[now],0x3f,sizeof(dp[now]));
for(j=;j<=maxw[i-];j++)
for(k=;k+j<=maxw[i-];k++)
if(dp[now^][j][k]<inf){
gmin(dp[now][j][k],dp[now^][j][k]);
if(!j)gmin(dp[now][j+d[i].w][k],dp[now^][j][k]+d[i].h);
else gmin(dp[now][j+d[i].w][k],dp[now^][j][k]);
if(!k)gmin(dp[now][j][k+d[i].w],dp[now^][j][k]+d[i].h);
else gmin(dp[now][j][k+d[i].w],dp[now^][j][k]);
}
}
int ans=inf;
for(i=;i<=maxw[n];i++)
for(j=;j+i<=maxw[n];j++){
k=maxw[n]-i-j+d[].w;
if(dp[now][i][j]<inf)
gmin(ans,(dp[now][i][j])*max(i,max(j,k)));
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. Uiautomator--断言的使用
  2. 自动化测试工具——JMeter
  3. centos7下安装vsftpd与PAM虚拟用户
  4. iOS-布局-Masonry
  5. apache一个IP多个站点的配置方法
  6. HDFS的Java客户端操作代码(HDFS的查看、创建)
  7. STP根交换机,指定端口,根端口,阻塞端口
  8. JBoss 系列十一:JBoss Cluster Framework Demo 介绍
  9. 异步tcp通信——APM.Server 消息推送服务的实现
  10. python自动化执行脚本
  11. (三)Jquery Mobile按钮详细讲解
  12. [BZOJ2783/JLOI2012]树 树上倍增
  13. Linux三剑客-AWK
  14. 简单实用的jQuery分页插件
  15. spring框架 AOP核心详解
  16. egg 为企业级框架和应用而生, 阿里出品
  17. Openwrt中用iftop查看网络流量情况
  18. storm的可靠性
  19. Loader拉取图片,由于redirect重定向,导致策略文件无效 设置checkPolicyFile后还是无效:需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志
  20. 线程相关函数(5)-pthread_rwlock_rdlock(),pthread_rwlock_wrlock() 读写锁

热门文章

  1. mac环境下利用MAMP配置PHPStorm
  2. python_判断字符串编码的方法
  3. mapper.xml文件中标签不显示问题
  4. Linux 链接网络
  5. C#获取堆栈信息,输出文件名、行号、函数名、列号等
  6. Centos下安装禅道
  7. ORACLE显式授权
  8. eclipse中删除tomcat server 导致不能重新创建该server
  9. 函数指针的应用学习Demo
  10. 开发环境入门 linux基础 基本操作命令(部分) 文本结构和基本命令