题解 | #木棍游戏#

木棍游戏

https://ac.nowcoder.com/acm/contest/11220/C

题意: 给出一些互不相同的木棍,选择其中的一些木棍。问能够拼凑出的三角形中最大的面积是多少。若不能拼出任何三角形,输出 1-1

制约: 3n8,1a103{A}3 \le n \le 8, 1 \le a \le 10^3 \in \{A\}


前置知识:三斜求积(海伦公式)。

p=a+b+c2S=p×(pa)×(pb)×(pc)p = \dfrac{a + b + c}{2}\\ \quad\\ S = \sqrt{p \times (p - a) \times (p - b) \times (p - c)}
  • 数据较小,直接暴搜。

CPP代码
#include <bits/stdc++.h>
using namespace std;

int main() {
  std::cin.tie(nullptr)->sync_with_stdio(false);

  int n;
  std::cin >> n;
  std::vector<int> A(n);

  for (auto &i : A) {
    std::cin >> i;
  }

  double ans = 0.0;

  std::function<void(int, int, int, int)> DFS = 
[&](int a, int b, int c, int id) {

    if (a && b && c && a + b > c && a + c > b && b + c > a) {
      double p = a + b + c;
      p /= 2.;
      ans = std::max(ans, std::sqrt(p * (p - a) * (p - b) * (p - c)));
    }

    if (id > n) {
      return;
    }

    DFS(a, b, c + A[id], id + 1);
    DFS(a + A[id], b, c, id + 1);
    DFS(a, b + A[id], c, id + 1);
    DFS(a, b, c, id + 1);
  };

  DFS(0, 0, 0, 0);

  if (ans == 0) {
    std::cout << -1;
  } else {
    std::cout << std::fixed << std::setprecision(1) << ans;
  }

  return 0 ^ 0;
}


bonus: 如果需要使用全部的木棍,该怎么处理? 去洛谷看看这个题目

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-11-27 10:04
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务