题目链接:围三角
算法分析
若已知三角形的三条边,我们可以通过海伦公式计算出面积
记 dp[i][j][k]
表示用前 条线段拼出三角形的其中两条边分别为 和 的可行性
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; const int MX = 1605; bool dp[MX][MX]; inline void chmax(ll& x, ll y) { if (x < y) x = y; } int main() { int n; cin >> n; vector<int> a(n); rep(i, n) cin >> a[i]; int s = 0; rep(i, n) s += a[i]; int m = s/2; dp[0][0] = true; rep(i, n) { for (int j = m; j >= 0; --j) { for (int k = j; k >= 0; --k) { if (dp[j][k]) { dp[j+a[i]][k] = dp[j][k+a[i]] = true; } } } } auto area = [&](int x, int y, int z) { ll p = x+y+z; return p * (p-2*x) * (p-2*y) * (p-2*z); }; ll ans = 0; for (int i = m; i >= 0; --i) { for (int j = i; j >= 0; --j) { //如果 边长 i,j能够成三角形的两边,第三边肯定是剩下的所有数之和 s - i - j if (dp[i][j]) { chmax(ans, area(i, j, s-i-j)); } } } cout << ans << '\n'; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现