题意略。

思路:

本题开始我先写了一发dfs暴力,然而递归程度太深,导致爆栈。仔细回想一下dfs的过程,发现最不好处理的就是每收集到3个木棍,才能构成一个三角形。

并且,还有一个隐患就是不能完全枚举出来木棍的组合情况。那么我们可以预先把木棍的组合情况枚举出来,按照题意,不会超过220种现在我们就是

想在这些组合情况中谋求最大面积。这样,我们可以把这个题看成为一个特殊的背包问题。

令dp[i][state]为在0~i中,当前恰好持有的木棍情况为state,且这些木棍要全部用完,我可以谋取的最大利益。那么状态转移方程为:

dp[i][state] = max(dp[i - 1][state],dp[i - 1][state - 当前方案所需木棍情况] + area);

详见代码:

#include<bits/stdc++.h>
#define maxn 251
#define maxn1 5000
using namespace std; struct node{
double val;
int state;
node(double a = ,int b = ){
val = a,state = b;
}
}; double store[];
node depot[maxn];
double dp[][maxn1];
int n; double cal(double a,double b,double c){
double p = (a + b + c) / ;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
bool judge(double a,double b,double c){
return (fabs(a - b) < c && c < a + b);
}
void depart(int s){
for(int i = ;i < n;++i){
if(s & (<<i)) printf("");
else printf("");
}
} int main(){
while(scanf("%d",&n) == && n){
for(int i = ;i < n;++i) scanf("%lf",&store[i]);
int tail = ;
for(int i = ;i < n;++i){
for(int j = i + ;j < n;++j){
for(int k = j + ;k < n;++k){
double a = store[i],b = store[j],c = store[k];
if(!judge(a,b,c)) continue;
depot[tail++] = node(cal(a,b,c),(<<i) | (<<j) | (<<k));
}
}
}
for(int i = ;i < ;++i){
for(int j = ;j < maxn1;++j) dp[i][j] = -;
}
dp[][depot[].state] = depot[].val;
dp[][] = ;
int total = (<<n);
for(int i = ;i < tail;++i){
for(int s = ;s < total;++s){
dp[i & ][s] = dp[(i - ) & ][s];
if(depot[i].state != (s & depot[i].state) || dp[(i - ) & ][s - depot[i].state] == -) continue;
dp[i & ][s] = max(dp[i & ][s],dp[(i - ) & ][s - depot[i].state] + depot[i].val);
}
}
double ans = ;
for(int s = ;s < total;++s){
ans = max(ans,dp[(tail - ) & ][s]);
}
printf("%.2lf\n",ans);
}
return ;
}

HDU 5135的更多相关文章

  1. [HDU 5135] Little Zu Chongzhi's Triangles (dfs暴搜)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 题目大意:给你n条边,选出若干条边,组成若干个三角形,使得面积和最大.输出最大的面积和. 先将边 ...

  2. hdu 5135 Little Zu Chongzhi's Triangles

    http://acm.hdu.edu.cn/showproblem.php?pid=5135 题意:给你N个木棍的长度,然后让你组成三角形,问你组成的三角形的和最大是多少? 思路:先求出可以组成的所有 ...

  3. hdu 5135(2014广州—状态dp)

    t题意:给你n条边,构造任意个三角形,一个三角形恰好只用3条边,每条边只能一次,求面积最大值 思路: 最开始想的是先排序从大到小取,但感觉并不怎么靠谱. 最多12条边,所以可以求出所有可能的三角形面积 ...

  4. HDU 5135.Little Zu Chongzhi's Triangles-字符串 (2014ACM/ICPC亚洲区广州站-重现赛)

    Little Zu Chongzhi's Triangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 ...

  5. HDU 5135(再思考)

    题意略. 思路:再思考后发现,为了构造出最大的三角形面积和,我们应该尽量让长的棍子相组合,这样构造出的三角形面积和最大,贪心能解. #include<bits/stdc++.h> usin ...

  6. hdu 1199 Color the Ball

    http://acm.hdu.edu.cn/showproblem.php?pid=1199 Color the Ball Time Limit: 2000/1000 MS (Java/Others) ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. Apache Httpd 启用重定向 rewrite

    1.启用模块 由:#LoadModule rewrite_module modules/mod_rewrite.so 更改为:LoadModule rewrite_module modules/mod ...

  2. 使用.net core基于Razor Pages开发网站一些工作笔记

    本文是在实践工作中遇到的一些问题记录,并给出是如何解决的,.net core已经升级到3.0版本了,其实在项目中很早就已经在使用.net core来开发后台接口了,正好有个网站项目,就使用了Razor ...

  3. python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块

    4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...

  4. 配置没有问题,虚拟机Ubuntu系统ifconfig没有网卡信息

    如果没有问题,前几天都好好的,突然出现这个问题 sudo ifconfig etho up 其中eth0是我的网卡名称

  5. some (1)

    每次在写博客的时候,都是自己觉得在工作中非常重要的东西,写东西的时候,也是一个思考的过程.好的东西不光帮助别人,也使自己有进一步的理解.

  6. linux下pip的安装

    ---恢复内容开始--- 1 输入apt-cache search wxpython 如果有返回信息 则输入 sudo apt-get install python-tools 2 否则 1.添加软件 ...

  7. maven-assembly-plugin 进行打包

    maven-assembly-plugin使用描述(拷自 maven-assembly-plugin 主页) The Assembly Plugin for Maven is primarily in ...

  8. 安装CUDA9.0及对应版本的tensorflow-gpu详细过程(Windows server 2012R2版本也可以)

    由于最近跑机器学习相关代码的时候CPU运算速度跟不上,这才利用GPU来运算代码,显然使用GPU来运算速度明显要快很多,但是搭配GPU的使用环境是真的麻烦且头疼.网上有很多牛人的搭建过程,虽然他们都成功 ...

  9. hadoop学习(七)----mapReduce原理以及操作过程

    前面我们使用HDFS进行了相关的操作,也了解了HDFS的原理和机制,有了分布式文件系统我们如何去处理文件呢,这就的提到hadoop的第二个组成部分-MapReduce. MapReduce充分借鉴了分 ...

  10. Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

    前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...