博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 题解 P1284 【三角形牧场】
阅读量:6915 次
发布时间:2019-06-27

本文共 1472 字,大约阅读时间需要 4 分钟。

  • 状态:
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
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<
<<" "; } //cout<
=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)<

转载于:https://www.cnblogs.com/hulean/p/10818554.html

你可能感兴趣的文章
chrome 插件开发
查看>>
[LintCode] Serialize and Deserialize Binary Tree
查看>>
Android 矢量图
查看>>
linux awk命令详解
查看>>
MySQL的SET字段类型
查看>>
Quartz数据库表分析
查看>>
python 中的if __name__ == 'main':
查看>>
各网站平台API接口整理
查看>>
以修改字体为例谈Android的listView开发优化
查看>>
addLoadEvent(func) 不管在页面加载完毕执行多少个函数,都应付自如
查看>>
Android下横竖屏切换的处理
查看>>
进击的JAVA(1)
查看>>
PHP整理笔记五目录与文件
查看>>
在ASP.net中使用OWC绘制统计图表
查看>>
【BZOJ 2440】[中山市选2011]完全平方数
查看>>
SVN学习总结(1)——SVN简介及入门使用
查看>>
嵌入式linux开发uboot移植(三)——uboot启动过程源码分析
查看>>
zabbix-agentd 的配置
查看>>
网站原创文章撰写的5点注意要素
查看>>
Linux 配置Apache服务器 下(虚拟主机,排错)
查看>>