标签:style http io ar os sp for on div
传送门:HDU_5135
题意:给你n个木棒,拼出任意个三角形,要求面积和最大,输出max(s);
3 1 1 20 7 3 4 5 3 4 5 90 0
0.00 13.64
思路:暴力搜索
代码:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<string>
#include<map>
#include<vector>
#include<queue>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof a)
#define read_ freopen("i.txt","r",stdin)
using namespace std;
typedef long long LL;
const int N=100010;
int n;
double sti[20];
int vis[20];
double ans;
void dfs(int cur,double s)
{
for(int i=cur;i<n-2;i++) if(!vis[i]){
for(int j=i+1;j<n-1;j++) if(!vis[j]){
for(int k=j+1;k<n;k++) if(!vis[k]){
if(sti[i]+sti[j]>sti[k]&&sti[i]+sti[k]>sti[j]&&sti[j]+sti[k]>sti[i])
{
vis[i]=vis[j]=vis[k]=1;
double p=(sti[i]+sti[j]+sti[k])/2;
double ss=sqrt(p*(p-sti[i])*(p-sti[j])*(p-sti[k]));
dfs(i+1,s+ss);
vis[i]=vis[j]=vis[k]=0;
}
}
}
}
ans=max(ans,s);
}
int main()
{
while(scanf("%d",&n),n)
{
ans=0.0;
mem(vis,0);
for(int i=0;i<n;i++)
scanf("%lf",sti+i);
sort(sti,sti+n);
dfs(0,0.0);
printf("%.2f\n",ans);
}
return 0;
}
HDU_5135 Little Zu Chongzhi's Triangles[爆搜]
标签:style http io ar os sp for on div
原文地址:http://blog.csdn.net/code_or_code/article/details/41723961