洛谷 题解 P1284 【三角形牧场】
- 状态:
dp[i][j]表示用i和j的木板能否搭成,不用去管第三块,因为知道了两块的长度与周长,那就可以表示出第三块:c-i-j
- 转移
有点类似于背包
if((j-l[i]>=0&&dp[j-l[i]][k])||(k-l[i]>=0&&dp[j][k-l[i]]))dp[j][k]=1;
因为此状态只可能从没加上这根木板的时候转移过来
- 判断
判断这三块木板能否组成三角形
inline bool check(int a,int b,int c)
{
if(a+b>c&&a+c>b&&b+c>a)return 1;
return 0;
}
check(i,j,c-i-j)
- 计算面积
这里用到了海伦公式
\(S=\sqrt{p*(p-a)*(p-b)*(p-c)}\)
\(p\)为半周长:\((a+b+c)/2\)
具体可以查百度
inline double get(double a,double b,double c)//注意,这里不能定义成整型,否则会WA
{
double p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
献上完整代码:
#include<bits/stdc++.h>
using namespace std;
int n,c;
int l[50];
int wood[4];
bool dp[800+10][800+10];
inline double get(double a,double b,double c)//计算面积
{
double p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
inline bool check(int a,int b,int c)//能否组成三角形
{
if(a+b>c&&a+c>b&&b+c>a)return 1;
return 0;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++)
cin>>l[i],c+=l[i];
dp[0][0]=1;//初始状态
for(int i=1;i<=n;i++)
{
for(int j=c/2;j>=0;j--)
{
for(int k=c/2;k>=0;k--)
{
if((j-l[i]>=0&&dp[j-l[i]][k])||(k-l[i]>=0&&dp[j][k-l[i]]))dp[j][k]=1;//状态转移
//cout<<dp[j][k]<<" ";
}
//cout<<endl;
}
}
double ans=-1;
for(int i=c/2;i>=1;i--)
{
for(int j=c/2;j>=1;j--)
{
if(dp[i][j]&&check(i,j,c-i-j))ans=max(ans,get(i,j,c-i-j));//找到最大值
}
}
cout<<(int)(ans==-1?-1:ans*100)<<endl;
return 0;
}
洛谷 题解 P1284 【三角形牧场】的更多相关文章
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- 洛谷P1284 三角形牧场
题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有 ...
- 洛谷 题解 UVA572 【油田 Oil Deposits】
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...
- luogu P1284 三角形牧场
题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有 ...
- P1284 三角形牧场
题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有 ...
- 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
- 洛谷 P1284 三角形牧场 题解(背包+海伦公式)
题目链接 题目大意 给你 n块木板(n<=40),每块木板长度为\(l[i]<=40\) 每块木板都要用,求最大的三角形面积×100,答案直接舍去小数 题目思路 首先如果已知三条边的长度可 ...
- 洛谷P1118数字三角形题解
题目 这个题我们乍一看会有些熟悉.觉得是可以用DP来做的那个题.但是打眼一看,就会发现不对了.因为那个题是顺推而这个题则是逆推. 这样的话可怎么办呢. 我们可以在草稿纸上推一下,我们随便写个数n. 再 ...
随机推荐
- 爬取前尘无忧python职位信息并保存到mongo数据库
1.re实现 import re,os import requests from requests.exceptions import RequestException MAX_PAGE = 10 # ...
- 数值(Number,Math, 运算符)
1.js中数字 1.数字存储 Javascript中所有数字的存储都是64位浮点数.整数也一样. 1 === 1.0 // true 2. 数字大小范围 可以表示的最大正数和最小负数 (-Math.p ...
- Lock的lock/unlock, condition的await/singal 和 Object的wait/notify 的区别
在使用Lock之前,我们都使用Object 的wait和notify实现同步的.举例来说,一个producer和consumer,consumer发现没有东西了,等待,produer生成东西了,唤醒. ...
- 內嵌html字符串顯示
前端:System.Web.HttpUtility.HtmlEncode() @Html.Raw(htmlStr) 後端:System.Net.WebUtility.HtmlDe ...
- learning express step(十一)
learning express.Router() code: const express = require('express'); const app = express(); var route ...
- 利用模板和C++11特性实现的智能指针-作用同share_ptr
根据C++11特性实现,基本上实现了同SharePtr同样的功能,有时间继续优化.之前一直以为引用计数是一个静态的int类型,实际上静态值是不可以的.之前项目中总是不太习惯使用智能指针.通过自实现的方 ...
- [Luogu] 消息扩散
https://www.luogu.org/problemnew/show/2002 Tarjan 缩点 + 入度判断 #include <iostream> #include <c ...
- luogu P4859 已经没有什么好害怕的了
嘟嘟嘟 题中给的\(k\)有点别扭,我们转换成\(a > b\)的对数是多少,这个用二元一次方程解出来是\(\frac{n + k}{2}\). 然后考虑dp,令\(dp[i][j]\)表示前\ ...
- 【线性代数】4-4:正交基和Gram算法(Orthogonal Bases and Gram-Schmidt)
title: [线性代数]4-4:正交基和Gram算法(Orthogonal Bases and Gram-Schmidt) categories: Mathematic Linear Algebra ...
- CF1208A
CF1208A 题意: 就是把斐波那契数列的+改成异或,求第n项的值. 解法: 又是一个人类智慧题,打表找规律. 可以发现答案在 $ a,b,a⊕b $ 三个数中循环 CODE: #include&l ...