求助
  • 板块灌水区
  • 楼主Dreamsuzki
  • 当前回复12
  • 已保存回复12
  • 发布时间2020/5/7 14:52
  • 上次更新2023/11/7 02:58:01
查看原帖
求助
216438
Dreamsuzki楼主2020/5/7 14:52

题目描述

AANN本算法书,第ii本书的高度为hih_i,厚度为wiw_i

AA想要制造一个三层的矩形书架来放置这些书籍。要求书籍全部正立放进书架。

AA想知道能放下这些书籍的书架的表面积最少为多少?

书架的最小表面积等于书架的总高度乘以厚度总和最大的那一层的厚度总和。注意不允许有其中一层高度为00.

输入格式

第一行一个正整数NN

接着NN行,第i+1i+1行两个用空格隔开的正整数为hih_iwiw_i

输出格式

一行一个整数,要求见题面描述

输入输出样例

输入 #1 复制

4
150 8
160 7
170 9
150 10

输出 #1 复制

7200

说明/提示

样例解释:

第一层放一、二号书,高度为max(160,150)=160\max(160,150)=160,厚度和为8+7=158+7=15

第二层放三号书,高度为170170,厚度和为99

第三层放四号书,高度为150150,厚度和为1010

书架表面积=15×(160+170+150)=7200=15\times(160+170+150)=7200

对于3030%的测试数据,n15n\le15.

对于100100%的测试数据,3n70,150<=hi300,5i303\le n\le70,150<=\le h_i\le300,5\le i\le30

(友情提示:时限3s)


这道题我是用DFS+剪枝做的,代码如下:

#include<bits/stdc++.h>
#define ll long long
#define landingyu work();
#define AK return
#define IOI 0;
#define inf 0x3f3f3f3f
#define eps 0.00001
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
void write(int x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9)write(x/10);
    putchar(x%10+'0');
}

using namespace std;
struct node{
	int w;
	int h;
}book[75];
int maxw=-inf,ans=inf,n;
inline int max3(int a,int b,int c){return max(max(a,b),c);}
inline void dfs(int level,int ah,int bh,int ch,int aw,int bw,int cw){
	if(level==n+1){
		if(ah && bh && ch) ans=min(ans,max3(aw,bw,cw)*(ah+bh+ch));
		return;
	}
	if(max3(aw,bw,cw)*(ah+bh+ch)>=ans) return;
	dfs(level+1,max(ah,book[level].h),bh,ch,aw+book[level].w,bw,cw);
	dfs(level+1,ah,max(bh,book[level].h),ch,aw,bw+book[level].w,cw);
    dfs(level+1,ah,bh,max(ch,book[level].h),aw,bw,cw+book[level].w);
}
inline void work(){
    n=read();
    for(register int i=1;i<=n;i++) book[i].h=read(),book[i].w=read();
    dfs(1,0,0,0,0,0,0);
    write(ans);
}
int main(){landingyu AK IOI}

但是TLE,在线等大佬,求剪枝

2020/5/7 14:52
加载中...