Triangular Pastures POJ - 1948
Triangular Pastures POJ - 1948
sum表示木条的总长。a[i]表示第i根木条长度。ans[i][j][k]表示用前i条木条,摆成两条长度分别为j和k的边是否可能。
那么ans[i][j][k]=ans[i-1][j-a[i]][k] || ans[i-1][j][k-a[i]]
可以用滚动数组优化。
最后在ans[n]中枚举i和j,如果ans[n][i][j]为true,再算出sum-i-j的长度,判断是否存在分别以i,j,sum-i-j为三边长的三角形。如果存在,再用海伦公式算出三角形面积,用面积去更新最大面积。
错误记录:
没有在dp的时候判边界,也就是没有判j>=a[i]和k>=a[i]。
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
bool ans[][];
LL a[],n,sum;
double p,anss;
int main()
{
LL i,j,k,x,y,z;
scanf("%lld",&n);
for(i=;i<=n;i++)
{
scanf("%lld",&a[i]);
sum+=a[i];
}
ans[][]=;
for(i=;i<=n;i++)
for(j=sum;j>=;j--)
for(k=sum;k>=;k--)
{
if(j>=a[i])
ans[j][k]|=ans[j-a[i]][k];
if(k>=a[i])
ans[j][k]|=ans[j][k-a[i]];
}
for(x=;x<=sum;x++)
for(y=x;y<=sum-x-;y++)
{
if(!ans[x][y]) continue;
z=sum-x-y;
if(y>z) break;
if(x+y<=z) continue;
p=(double)(x+y+z)/2.0;
anss=max(anss,sqrt(p*(p-x)*(p-y)*(p-z)));
}
if(anss!=0.0)
printf("%lld",(long long)(anss*(double)));
else
printf("-1");
return ;
}
Triangular Pastures POJ - 1948的更多相关文章
- POJ1948 Triangular Pastures
POJ1948 Triangular Pastures #include <iostream> #include <cmath> using namespace std; ; ...
- [POJ] 1948 Triangular Pastures (DP)
题目地址:http://poj.org/problem?id=1948 题目大意: 给N条边,把这些边组成一个三角形,问面积最大是多少?必须把所有边都用上. 解题思路: 根据题意周长c已知,求组合三边 ...
- poj 1948 Triangular Pastures 小结
Description Like everyone, cows enjoy variety. Their current fancy is new shapes for pastures. The o ...
- POJ 1948 Triangular Pastures【二维01背包】
题意:给出n条边,用这n条边构成一个三角形,求三角形的最大面积. 先求面积,用海伦公式,s=sqrt(p*(p-a)*(p-b)*(p-c)),其中a,b,c分别为三角形的三条边,p为三角形的半周长, ...
- POJ 1948 Triangular Pastures
题意: 把很多单独的线段重新组合成一个三角形,使得三角形面积最大(所有的线段都必须用上). 思路: 三角形的任意一条边的边长不能超过周长的一半,只需要用dp枚举两条边j,k,剩下的一条边长为tot ...
- Triangular Pastures (二维01背包)
描述Like everyone, cows enjoy variety. Their current fancy is new shapes for pastures. The old rectang ...
- poj 1948二维01背包
题意:给出不多于40个小棍的长度,求出用所有小棍组成的三角形的最大面积. 思路:三角形3边求面积,海伦公式:p=(a+b+c)/2;S=p*(p-a)*(p-b)*(p-c);因为最大周长为1600 ...
- POJ - 1948 二维01背包
T了两发,DP方程很简单粗暴 dp[i][j][k]:用前i物品使得容量分别为j和k的背包恰好装满 背包的调用只需一次即可,第一次T就是每次check都丧心病狂地背包一次 对于sum的枚举,其实i j ...
- POJ 1948
这道题我记得是携程比赛上的一道. 开始时想直接设面积,但发现不可以,改设能否构成三角形.设dp[i][j][k]为前i根木棍构成边长为j和k的三角形,那么转移可以为dp[i][j][k]=dp[i-1 ...
随机推荐
- 【python】urllib2
urllib2.urlopen(url[, data][, timeout]) 请求url,获得请求数据,url参数可以是个String,也可以是个Request参数 没有data参数时为GET请求, ...
- [React] PureComponent in React
In this lesson, you will learn how to use PureComponent in React to reduce the number of times your ...
- C#如何引用定义好的dll文件
1 添加引用,找到dll文件 2 引用类的名称空间,生成类的实例,调用类的方法,测试OK.
- 是男人就下100层【第四层】——Crazy贪吃蛇(2)
在上一篇<是男人就下100层[第四层]--Crazy贪吃蛇(1)>中我们让贪吃蛇移动了起来,接下来我们来实现让贪吃蛇能够绕着手机屏幕边线移动而且能够改变方向 一.加入状态并改动代码 首先我 ...
- JS日历控件 灵活设置: 精确的时分秒.
在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时仅仅支持 年月日 的日历控件,如今优化例如以下: 1. 在原基础上 支持 yyyy-mm-dd 的年月 ...
- 欧莱雅浅谈OC中方法调用的顺序中的Category
OC特有的分类Category,依赖于类.它可以在不改变原来的类内容的基础上,为类增加一些方法.分类的使用注意: (1)分类只能增加方法,不能增加成员变量: (2)在分类方法的实现中可以访问原来类中的 ...
- 百度AI的语音合成,语音识别
1,语音的合成,识别 后端代码: from aip import AipSpeech, AipNlp import os # 语音合成 """ 你的 APPID AK S ...
- 可以声明接口,但不可以new接口
接口是一种特殊的抽象类,它包含常量和方法的声明,但没有方法的实现:可以把接口看成是一种特殊的抽象类: 接口实质上是一种规范,它关心的是"做什么",不关心"怎样做" ...
- 配置mahout
构建Mahout要求系统事先安装 1)JDK 1.6 或更高版本 2)Maven 2.0.9 或 2.0.10 Mahout是Hadoop的一种高级应用.运行Mahout需要提前安装好Hadoop.H ...
- mysql13---索引使用注意
.4唯一索引 ①当表的某列被指定为unique约束时,这列就是一个唯一索引 ) unique); 这时, name 列就是一个唯一索引. unique字段可以为NULL,并可以有多NULL(,null ...