zoukankan      html  css  js  c++  java
  • hdu 5135 Little Zu Chongzhi's Triangles

    题意:给你n个木棒,然后用这些构成三角形,求最大的面积

    状压一下

    #include<bits/stdc++.h>
    using namespace std;
    double area(int a,int b,int c){
        double p=(a+b+c)*1.0/2;
        return sqrt(p*(p-a)*(p-b)*(p-c));
    }
    double dp[1<<(13)];
    int p[20],n;
    bool vit[13];
    bool judge(int a,int b,int c){
        if(a+b>c&&a+c>b&&b+c>a) return 1;
        return 0;
    }
    int main(){
        while(scanf("%d",&n)&&n){
            for(int i=0;i<n;i++) scanf("%d",&p[i]);
            double ans=0,mmax=0;
            sort(p,p+n);
            memset(dp,0,sizeof(dp));
            int len=1<<n;
            for(int i=1;i<=len;i++){
                int tp=i,id=0;
                vector<int>tmp;tmp.clear();
                while(tp){
                    if(tp&1) tmp.push_back(id);
                    tp/=2;
                    id++;
                }
                if(tmp.size()<3) continue;
                for(int ii=0;ii<tmp.size();ii++)
                for(int j=ii+1;j<tmp.size();j++)
                for(int k=j+1;k<tmp.size();k++){
                    int a=tmp[ii],b=tmp[j],c=tmp[k];
                    if(!judge(p[a],p[b],p[c])) continue;
                    int tt=i-(1<<a)-(1<<b)-(1<<c);
                    dp[i]=max(dp[i],dp[tt]+area(p[a],p[b],p[c]));
                    mmax=max(mmax,dp[i]);
                }
            }
            printf("%.2f
    ",mmax);
        }
    }
  • 相关阅读:
    列表、元组、字典等相关命令
    字符串相关命令
    Python简介
    二进制的趣事
    Shell脚本基础
    Linux基本服务
    一次性计划任务at与周期性计划任务crontab
    Linux权限管理
    python-文件操作
    python-初识python
  • 原文地址:https://www.cnblogs.com/ainixu1314/p/4715472.html
Copyright © 2011-2022 走看看