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 ...
随机推荐
- CentOS 7.0安装Zimbra 8.6邮件服务器
Zimbra的核心产品是Zimbra协作套件(Zimbra Collaboration Suite,简称ZCS). 系统:Centos7 ip地址:192.168.127.131 安装前准备 1.关闭 ...
- 微信小程序之 SideBar(侧栏分类)
项目目录: 模拟数据: utils / data.js function getSData() { var data = [ { "id": 1, "tree" ...
- poj1161Post Office【经典dp】
题目:poj1161Post Officeid=1160" target="_blank">点击打开链接 题意:给出一条直线上的n个坐标表示村庄的位置,然后要在上面 ...
- Python常用的几种常用的内置函数
abs(x) 用于返回绝对值 divmod(x,y) 函数中传入两个数字,返回的是x/y的一个结果的元组(商,余数) pow(x,y) 用于 ...
- 百万级PHP网站Poppen.de的架构分享心得
在了解过世界最大的PHP站点,Facebook的后台技术后, 今天我们来了解一个百万级PHP站点的网站架构:Poppen.de.Poppen.de是德国的一个社交网站,相对Facebook.Flick ...
- Swift String 一些经常用法
直接上代码 //字符串 //1 推断字符串是否为空 var test1Str="" var test1Str2:String = String(); println("t ...
- HDU 4277 USACO ORZ(暴力+双向枚举)
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【STORAGE】Qlogic FC存储交换机cmd配置方法
*************************************************************** ****原文: blog.csdn.net/clark_xu 徐长亮专 ...
- flask的CBV,flash,Flask-Session,及WTForms-MoudelForm
1,CBV: from flask import vews class LoginView(views.MethodView): def get(self): return "雪雪其实也很好 ...
- ALLOWED_HOSTS = ['*']
https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-ALLOWED_HOSTS https://stackoverflow ...