HDU5135Little Zu Chongzhi's Triangles(状态压缩DP)
2017-07-22 19:44
357 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135
题意:
给出n根木棍,随意组成几个三角形,问组合的面积最大是多少;
思路:
用状态压缩,首先把可以组成的三角形的合法情况全都放进vector里,然后枚举。
题意:
给出n根木棍,随意组成几个三角形,问组合的面积最大是多少;
思路:
用状态压缩,首先把可以组成的三角形的合法情况全都放进vector里,然后枚举。
#include<bits/stdc++.h> using namespace std; int s[12]; double dp[1<<12]; vector<int> v; double cul(int a, int b, int c) { if(a + b <= c) return 0.0; double p = (a + b + c) * 0.5; return sqrt(p*(p-a)*(p-b)*(p-c)); } int main() { int n; while(scanf("%d", &n) != EOF && n) { v.clear(); memset(dp, 0, sizeof(dp)); for(int i = 0; i < n; i++) scanf("%d", &s[i]); sort(s, s+n); for(int i = 0; i < n; i++) for(int j = i+1; j < n; j++) for(int k = j+1; k < n; k++) { int st = (1<<i) | (1<<j) | (1<<k); dp[st] = cul(s[i], s[j], s[k]); if(s[i] + s[j] > s[k]) v.push_back(st); } for(int i = 0; i < (1 << n); i++) for(int j = 0; j < v.size(); j++) { if(i & v[j]) continue; dp[i|v[j]] = max(dp[i|v[j]], dp[i] + dp[v[j]]); } printf("%.2f\n", dp[(1<<n)-1]); } return 0; }
相关文章推荐
- hdu5135 Little Zu Chongzhi's Triangles(状态压缩dp)
- hdoj 5125 Little Zu Chongzhi's Triangles【状态压缩dp】
- HDU 5135 Little Zu Chongzhi's Triangles(状态压缩dp+Vector)
- HDU 5135 Little Zu Chongzhi's Triangles(状态压缩dp)
- hdu 4628 Pieces (状态压缩dp)
- POJ 3311 Hie with the Pie (状态压缩DP ,TSP问题)
- POJ - 2441 Arrange the Bulls (状态压缩DP)
- POJ 1143 Number Game 状态压缩dp
- sdnu 1087.过河(NOIP 2005 提高组)DP状态压缩
- 动态规划之状态压缩dp入门
- poj1185 炮兵阵地(状态压缩dp)
- HDU 1074-Doing Homework(状态压缩dp)
- UVA 10817 Headmaster's Headache(dp 状态压缩 01背包)
- 洛谷 1052 dp 状态压缩
- POJ - 3411 Paid Roads (状态压缩DP)
- ACM HDU 1074 Doing Homework(位运算,搜索,状态压缩DP)
- hdu4336(概率DP+状态压缩)
- hdu1074 Doing Homework(状态压缩DP Y=Y)
- HDU 5418 Victor and World (Floyd + 状态压缩DP)
- poj 3254 Corn Fields //状态压缩DP