bzoj 1933: [Shoi2007]Bookcase 书柜的尺寸
来源:互联网 发布:网络运营托管 编辑:程序博客网 时间:2024/06/10 02:49
题意:给出n本书的高度和厚度,把它们放在三行的书架上(每一行至少一本书),问书架正面的最小面积。
题解:先按高度从大到小排序,保证后面加入的书不会对高度造成影响,再dp。
sum[i]表示前i本书的厚度和。第一维滚一下就好了。
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,f[2][2200][2200],sum[80],ans=2147483647;struct hh{ int h,t;}a[80];int cmp(hh x,hh y){ return x.h>y.h;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].h,&a[i].t); } sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i].t; int p=0,q=1; for(int i=1;i<=n;i++) { p^=1; q^=1; memset(f[p],63,sizeof(f[p])); for(int j=0;j<=sum[i-1];j++) { for(int k=0;j+k<=sum[i-1];k++) { f[p][j+a[i].t][k]=min(f[p][j+a[i].t][k],f[q][j][k]+(j==0)*a[i].h); f[p][j][k+a[i].t]=min(f[p][j][k+a[i].t],f[q][j][k]+(k==0)*a[i].h); f[p][j][k]=min(f[p][j][k],f[q][j][k]+(j+k==sum[i-1])*a[i].h); } } } for(int i=1;i<sum[n];i++) { for(int j=1;i+j<sum[n];j++) if(f[p][i][j]<=1000) ans=min(ans,f[p][i][j]*max(i,max(j,sum[n]-i-j))); } printf("%d",ans);}
阅读全文
0 0
- BZOJ 1933 [Shoi2007] Bookcase 书柜的尺寸
- bzoj 1933: [Shoi2007]Bookcase 书柜的尺寸
- BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 动态规划
- [BZOJ]1933: [Shoi2007]Bookcase 书柜的尺寸 DP
- bzoj1933: [Shoi2007]Bookcase 书柜的尺寸
- 2017.10.25 书柜的尺寸 失败总结
- BZOJ 1934: [Shoi2007]Vote 善意的投票
- bzoj 1934: [Shoi2007]Vote 善意的投票
- 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
- BZOJ-1934-Vote善意的投票-SHOI2007
- 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
- bzoj 1935: [Shoi2007]Tree 园丁的烦恼
- BZOJ 1934 [Shoi2007]Vote 善意的投票
- bzoj 1935: [Shoi2007]Tree 园丁的烦恼
- 【Shoi2007】bzoj 1935 园丁的烦恼
- BZOJ 1935 [Shoi2007]Tree 园丁的烦恼
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼
- BZOJ 1934: [Shoi2007]Vote 善意的投票
- SmartThreadPool
- c#获取网页源代码的5种方式
- Python模块学习笔记
- 青鸟微信群邀请统计
- css top与bottom属性
- bzoj 1933: [Shoi2007]Bookcase 书柜的尺寸
- Linux源码包安装卸载教程 以apache httpd源码包安装为教程(APR not found)
- Codeforces Round439 C.The Intriguing Obsession
- 【gcd分块】BZOJ4921[互质序列]题解
- 使用ZooKeeper实现Java跨JVM的分布式锁
- JAVA的Md5工具类
- 剑指offer-打印出字符串的所有排列
- java中成员变量与局部变量的区别
- 一点 · 栈