BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸
2024-10-19 21:22:28
神奇的dp优化。
考虑6维状态的dp,分别表示三行高和宽,显然MLE&&TLE。
把高排个序,从大到小往架上放,那么若不是重开一行便对高度没有影响。
然后求出宽度的sum,dp[i][j]表示第一行放了i的宽度,二行放了j的宽度,三行放了sum-i-j宽度的最小的高度值。
先把所有书放在第三行,然后从第二本开始转移,考虑往其他行移的情况。
避免MLE要滚动数组。
注意最后更新答案时保证i>0&&j>0&&sum-i-j>0且dp[i][j]!=INF;
//Twenty
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<ctime>
typedef long long LL;
using namespace std;
int n,sum,f[][][],ans=1e9;
struct book {
int hi,ti;
friend bool operator <(const book &A,const book &B) {
return A.hi>B.hi;
}
}bk[];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&bk[i].hi,&bk[i].ti);
sort(bk+,bk+n+);
for(int i=;i<=n;i++) sum+=bk[i].ti;
int o=;
memset(f,/,sizeof(f));
f[][][]=bk[].hi;
for(int i=;i<=n;i++) {
o^=;
for(int j=;j<=sum;j++) {
for(int k=;k<=sum&&j+k<sum;k++) {
f[o][j][k]=min(f[o][j][k],f[o^][j][k]);
if(!j) f[o][j+bk[i].ti][k]=min(f[o][j+bk[i].ti][k],f[o^][j][k]+bk[i].hi);
else f[o][j+bk[i].ti][k]=min(f[o][j+bk[i].ti][k],f[o^][j][k]);
if(!k) f[o][j][k+bk[i].ti]=min(f[o][j][k+bk[i].ti],f[o^][j][k]+bk[i].hi);
else f[o][j][k+bk[i].ti]=min(f[o][j][k+bk[i].ti],f[o^][j][k]);
if(i==n&&j!=&&k!=&&f[o][j][k]!=) {
ans=min(ans,f[o][j][k]*max(max(j,k),sum-j-k));
}
}
}
}
printf("%d\n",ans);
return ;
}
最新文章
- Java初学随笔
- photoshopcc基础教程
- ASP.NET MVC 4 Optimization的JS/CSS文件动态合并及压缩
- [转]html5 js 访问 sqlite 数据库的操作类
- do while(false)实用技巧
- C语言位运算详解
- leetcode 239 Sliding Window Maximum
- Apache POI 解析 microsoft word 图片文字都不放过
- poj2373
- 如何唯一确定一台iOS设备
- 无法打开 configsource 文件
- 服务器编程入门(4)Linux网络编程基础API
- keepalived: Compile &; startup
- 依赖反转原则DIP 与 asp.net core 项目结构
- shell 数值运算
- JavaWeb项目中web.xml有关servlet的基本配置
- Android_view的生命周期
- ssr.js数据模拟工具
- bzoj1212 L语言
- 使用Callable和Future接口创建线程
热门文章
- day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态
- 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。
- 基于Element-UI的el-table,input框输入实现排序功能
- Git中.gitignore忽略规则
- iOS 5 ARC 入门
- 前端笔记:animate+easing用法(hexo next主题自定义动画)
- selector是在文件夹drawable中进行定义的xml文件转载 https://www.cnblogs.com/fx2008/p/3157040.html
- 三种方法实现MNIST 手写数字识别
- icon 的前生今世 &; iconfont 的晋级之路
- 总结windows cmd 查看进程,端口,硬盘信息