洛谷 P1284 三角形牧场

题目描述

和所有人一样,奶牛喜欢变化。它们正在设想新造型的牧场。奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场。她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大。

请帮助Hei小姐构造这样的牧场,并计算出这个最大牧场的面积。

输入输出格式

输入格式:

第1行:一个整数N

第2..N+1行:每行包含一个整数,即是木板长度。

输出格式:

仅一个整数:最大牧场面积乘以100然后舍尾的结果。如果无法构建,输出-1。

输入输出样例

输入样例#1:

5
1
1
3
3
4

输出样例#1:

692

说明

样例解释:692=舍尾后的(100×三角形面积),此三角形为等边三角形,边长为4。

思路:

f[i][j][k]表示用i块木板是否可以组成的j长度和k长度的三角形

不断地将下一块木板分别加到j上和k上,能构成三角形就更新答案

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 int n,sum;
 6 double ans;
 7 int l[50];
 8 bool f[45][1601][1601];
 9 int qread()
10 {
11     int x=0,j=1;
12     char ch=getchar();
13     while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)j=-1;ch=getchar();}
14     while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
15     return x*j;
16 }
17 bool can(int a,int b,int c)
18 {
19     if(a+b>c && b+c>a && a+c>b)
20         return 1;
21     return 0;
22 }
23 double s(int a,int b,int c)
24 {
25     double p=double(a+b+c)/2;
26     return sqrt(p*(p-a)*(p-b)*(p-c))*100;
27 }
28 int main()
29 {
30     n=qread();
31     f[0][0][0]=1;
32     for(int i=1;i<=n;i++)
33     {
34         l[i]=qread();
35         sum+=l[i];
36     }
37     for(int i=1;i<=n;i++)
38         for(int j=0;j<=sum/2+1;j++)
39             for(int k=0;k<=sum/2+1;k++)
40                 if(f[i-1][j][k])
41                 {
42                     f[i][j][k]=1;
43                     f[i][j+l[i]][k]=1;
44                     f[i][j][k+l[i]]=1;
45                     if(can(j+l[i],k,sum-j-l[i]-k))
46                         ans=max(ans,s(j+l[i],k,sum-j-l[i]-k));
47                     if(can(j,k+l[i],sum-j-k-l[i]))
48                         ans=max(ans,s(j,k+l[i],sum-j-k-l[i]));
49                 }
50     if(int(ans)<=0.0)
51         printf("-1");
52     else printf("%d",int(ans));
53     return 0;
54 }
时间: 2024-08-09 02:03:54

洛谷 P1284 三角形牧场的相关文章

洛谷 P1284 三角形牧场WD

P1284 三角形牧场 题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大. 请帮助Hei小姐构造这样的牧场,并计算出这个最大牧场的面积. 输入输出格式 输入格式: 第1行:一个整数N 第2..N+1行:每行包含一个整数,即是木板长度. 输出格式: 仅一个整数:最大牧场面积乘以100然后舍尾的结果.如果无法构建,

洛谷P1284 三角形牧场

题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大. 请帮助Hei小姐构造这样的牧场,并计算出这个最大牧场的面积. 输入输出格式 输入格式: 第1行:一个整数N 第2..N+1行:每行包含一个整数,即是木板长度. 输出格式: 仅一个整数:最大牧场面积乘以100然后舍尾的结果.如果无法构建,输出-1. 输入输出样例

洛谷1284 三角形牧场

本题地址:http://www.luogu.org/problem/show?pid=1284 题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大.     请帮助Hei小姐构造这样的牧场,并计算出这个最大牧场的面积. 输入输出格式 输入格式: 第1行:一个整数N 第2..N+1行:每行包含一个整数,即是木板长度

luogu P1284 三角形牧场

题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大. 请帮助Hei小姐构造这样的牧场,并计算出这个最大牧场的面积. 输入输出格式 输入格式: 第1行:一个整数N 第2..N+1行:每行包含一个整数,即是木板长度. 输出格式: 仅一个整数:最大牧场面积乘以100然后舍尾的结果.如果无法构建,输出-1. 输入输出样例

P1284 三角形牧场

题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大. 请帮助Hei小姐构造这样的牧场,并计算出这个最大牧场的面积. 输入输出格式 输入格式: 第1行:一个整数N 第2..N+1行:每行包含一个整数,即是木板长度. 输出格式: 仅一个整数:最大牧场面积乘以100然后舍尾的结果.如果无法构建,输出-1. 输入输出样例

洛谷 P2912 [USACO08OCT]牧场散步Pasture Walking

题目描述 The N cows (2 <= N <= 1,000) conveniently numbered 1..N are grazing among the N pastures also conveniently numbered 1..N. Most conveniently of all, cow i is grazing in pasture i. Some pairs of pastures are connected by one of N-1 bidirectional

洛谷 P2807 三角形计数

P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入格式: 第一行为整数t(≤100),表示测试数据组数:接下来t行,每行一个正整数n(≤500). 输出格式: 对于每个n,输出一个正整数,表示三角形个数. 输入输出样例 输入样例#1: 复制 3 1 2 3 输出样例#1: 复制 1 5 13 说明 n(≤500) t(≤10

洛谷P1118 [USACO06FEB]数字三角形 搜索

洛谷P1118 [USACO06FEB]数字三角形Backward Digit Su-     搜索 这题我们发现每一个位置的加权就是 杨辉三角 yh[ n ][ i ] 然后我们就可以求 n! 暴力 ,但是会 TLE 额 好像是会T 因为12! 已经 4亿了然后我们加一个强力剪枝 如果当前求出来的 s 已经大于 sum了,因为没有负的加权,也就是说这一路是没有用了的,在继续搜下去也不能更新答案了,那么就直接退出 . 1 #include <cstdio> 2 #include <cma

洛谷P1118 数字三角形游戏

洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一个例子:     3   1   2   4       4   3   6         7   9          16 最后得到16这样一个数字. 现在想要倒着玩这样一个游戏,如果知道N,知道最后得到的数字的大小sum,请你求出最初序列a[i],为1-N的一个