【gmoj】 【暴搜】 积木
题目
解题思路
按照题目暴搜即可
正解是状压,但是数据范围小的可以,暴搜也行
代码
#include<iostream>
#include<cstdio>
using namespace std;
struct lzf{
int d,b,h;
}a[20];
int n,ans,p[20];
void dfs(int x,int l,int r,int sum)
{
if (sum>ans) ans=sum;
if (x>n) return;
for (int i=1;i<=n;i++)
{
if (p[i]) continue;
p[i]=1;
if (a[i].d<=l&&a[i].b<=r) dfs(x+1,a[i].d,a[i].b,sum+a[i].h);
if (a[i].d<=l&&a[i].h<=r) dfs(x+1,a[i].d,a[i].h,sum+a[i].b);
if (a[i].b<=l&&a[i].h<=r) dfs(x+1,a[i].b,a[i].h,sum+a[i].d);
p[i]=0;
}
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].d,&a[i].b,&a[i].h);
if (a[i].d>a[i].b) swap(a[i].d,a[i].b);
if (a[i].b>a[i].h) swap(a[i].b,a[i].h);
if (a[i].d>a[i].b) swap(a[i].d,a[i].b);
}
dfs(1,1e+8,1e+8,0);
printf("%d",ans);
return 0;
}