这道dp算是同类型dp中比较难的了,主要难点在于设置状态上;

如果像平时那样设置,必定爆空间没商量;

下面是一种思路:

先把输入进来的数据按h从大到小排序,这样就可以大大减少状态数,

然后设f[i][j][k]为前i本书第一个书柜厚度j,第二个书柜厚度k,第三个书柜厚度sum[i]-j-k的h最大值得最小和;

这样一是将h放在了里面,相当于一个方程思想,因为s可以由h,t算出来;

二是转移的时候,如果j,k或sum[i]-j-k为0,直接加上h,因为前面的h比后面的大,方便了转移;

但我最后也是心惊胆战的交了上去,幸运地A了;

这种题还是做的太少了,加油吧;

自己都不忍直视的代码->

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<ctime>
 5 #include<cstring>
 6 #include<string>
 7 #include<algorithm>
 8 #include<map>
 9 #include<set>
10 using namespace std;
11 #define LL long long
12 const long long inf=1000000000LL;
13 int n,c=0;
14 struct node{
15     int h,t;
16     bool operator<(const node& b)const{return h>b.h;}
17 }e[72];
18 LL f[2110][2110],sum[72];
19 void init(){
20     scanf("%d",&n);
21     for(int i=1;i<=n;i++){scanf("%d%d",&e[i].h,&e[i].t);c+=e[i].t;}
22     sort(e+1,e+n+1);
23     for(int i=1;i<=n;i++)sum[i]=sum[i-1]+e[i].t;
24 }
25 void work(){
26     memset(f,10,sizeof(f));
27     f[0][0]=0;
28     for(int i=1;i<=n;i++){
29         for(int j=c/2+1;j>=0;j--)
30             for(int k=c/2+1;k>=0;k--){
31                 if(sum[i]-j-k==e[i].t)f[j][k]+=e[i].h;
32                 if(j<e[i].t&&k<e[i].t)continue;
33                 if(j==e[i].t)f[j][k]=min(f[j][k],f[j-e[i].t][k]+e[i].h);
34                 if(j>e[i].t)f[j][k]=min(f[j][k],f[j-e[i].t][k]);
35                 if(k==e[i].t)f[j][k]=min(f[j][k],f[j][k-e[i].t]+e[i].h);
36                 if(k>e[i].t)f[j][k]=min(f[j][k],f[j][k-e[i].t]);
37             }
38     }
39     long long ans=10000000000LL;
40     for(int j=1;j<=c/2+1;j++)
41         for(int k=1;k<=c/2+1;k++){
42             if(c-j-k<=0)break;
43             ans=min(ans,(f[j][k]>=inf?inf:f[j][k])*max(max(j,k),c-j-k));
44         }
45     cout<<ans<<endl;
46 }
47 int main(){
48     init();
49     work();
50     return 0;
51 }

View Code

转载于:https://www.cnblogs.com/chadinblog/p/5847374.html

[Shoi2007]Bookcase 书柜的尺寸 dp相关推荐

  1. [BZOJ]1933: [Shoi2007]Bookcase 书柜的尺寸 DP

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

  2. BZOJ 1933 Shoi2007 Bookcase 书柜的尺寸

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. nginx header参数丢失_Nginx 性能优化有这篇就够了!
  2. Tomcat 8熵池阻塞变慢详解
  3. windows环境下安装nodeJS和express,一直提示command not found-配置环境变量
  4. Redis数据操作和与Python交互
  5. C#在Linux上的开发指南
  6. 【转】[iOS] 关于 self = [super init];
  7. 众安每秒3.2万张保单的背后,阿里云输出了什么能力?
  8. Android 实现瀑布流的两种思路
  9. 关于CSS预处理器(less,sass)
  10. linux 脚本返回值
  11. 数字的眼光看世界(常见常量、数值大下)
  12. 安卓自定义相机录像功能全解(不调用系统相机)
  13. JS逆向---获取某知名外卖平台数据(_token)
  14. 关于Sound Blaster Cinema 6找不到音频设备 史上最简单的解决方案
  15. MacOS 安装 gstreamer 最新版本(1.20.0)
  16. OpenGL ES 绘制图片
  17. 汉字转拼音工具JPinyin的介绍和使用示例
  18. 【PhotoShop】用自己的照片做个好看的星空头像PS
  19. Navicat12.1破 解教程,亲测可用
  20. 动态规划问题——招聘会

热门文章

  1. springmvc 发送PUT 和 DELETE 请求
  2. Moran_DeepLPF_Deep_Local_Parametric_Filters_for_Image_Enhancement_CVPR_2020_paper
  3. PostMan——使用方法
  4. 揭秘中国十大暴利行业(组图)
  5. Unity3D-实战-01坦克大战-day03箱式对撞机、钢体、2D渲染层级问题、重力问题(出现坠落现象)、旋转问题、左右上下冲突问题、抖动问题
  6. 2023 上海(深圳)国际导热散热材料及设备展览会
  7. Google针对非 SDK 接口的限制
  8. Kelvin Test
  9. 手游代理怎么做?看看这些就知道了
  10. Pytest-Pytest框架的使用