URAL 7077 Little Zu Chongzhi's Triangles(14广州I)
题意:有n根木棍,三根可能能够构成三角形,选出最多的三角形,问最大面积
分析:看到这个数据范围应该想到状压DP,这次我想到了。0010101的状态中,1表示第i根木棍选择,0表示没选,每一次三根木棍累加转移方程。虽说很简单,但是能自己独立敲出来还是很开心的,AC的快感!
/************************************************
* Author :Running_Time
* Created Time :2015/10/14 星期三 13:49:42
* File Name :I.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 13;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
int a[N];
int l[4];
double dp[(1<<N)+10];
int n; bool judge(void) {
if ((l[1] + l[2] > l[3] && abs (l[1] - l[2]) < l[3]) &&
(l[1] + l[3] > l[2] && abs (l[1] - l[3]) < l[2]) &&
(l[3] + l[2] > l[1] && abs (l[3] - l[2]) < l[1])) return true;
else
return false;
} double area(void) {
double p = (l[1] + l[2] + l[3]) / 2.0;
return sqrt (p * (p - l[1]) * (p - l[2]) * (p - l[3]));
} int main(void) {
while (scanf ("%d", &n) == 1) {
if (!n) break;
for (int i=0; i<n; ++i) {
scanf ("%d", &a[i]);
}
sort (a, a+n);
int m = (1 << n);
memset (dp, 0, sizeof (dp));
for (int r=0; r<m; ++r) {
int k = __builtin_popcount (r);
if (k % 3 != 0) continue;
for (int i=0; i<n; ++i) {
for (int j=i+1; j<n; ++j) {
for (int k=j+1; k<n; ++k) {
if ((r & (1 << i)) == 0 && (r & (1 << j)) == 0 && (r & (1 << k)) == 0) {
l[1] = a[i], l[2] = a[j], l[3] = a[k];
if (!judge ()) continue;
int v = r;
v |= (1 << i); v |= (1 << j); v |= (1 << k);
dp[v] = max (dp[v], dp[r] + area ());
}
}
}
}
} double ans = 0;
for (int i=0; i<m; ++i) {
int k = __builtin_popcount (i);
if (k % 3 != 0 || k < 3) continue;
ans = max (ans, dp[i]);
}
printf ("%.2f\n", ans);
} return 0;
}
URAL 7077 Little Zu Chongzhi's Triangles(14广州I)的更多相关文章
- UVALive 7077 - Little Zu Chongzhi's Triangles(暴力)
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- UVALive 7077 Little Zu Chongzhi's Triangles (有序序列和三角形的关系)
这个题--我上来就给读错了,我以为最后是一个三角形,一条边可以由多个小棒组成,所以想到了状态压缩各种各样的东西,最后成功了--结果发现样例过不了,三条黑线就在我的脑袋上挂着,改正了以后我发现N非常小, ...
- Little Zu Chongzhi's Triangles
Little Zu Chongzhi's Triangles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/512000 ...
- hdu5135 Little Zu Chongzhi's Triangles
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Total Submissi ...
- [HDU 5135] Little Zu Chongzhi's Triangles (dfs暴搜)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 题目大意:给你n条边,选出若干条边,组成若干个三角形,使得面积和最大.输出最大的面积和. 先将边 ...
- hdu 5135 Little Zu Chongzhi's Triangles
http://acm.hdu.edu.cn/showproblem.php?pid=5135 题意:给你N个木棍的长度,然后让你组成三角形,问你组成的三角形的和最大是多少? 思路:先求出可以组成的所有 ...
- HDU5131-Song Jiang's rank list HDU5135-Little Zu Chongzhi's Triangles(大佬写的)
Song Jiang's rank list Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/512000 K (Java ...
- HDU 5135.Little Zu Chongzhi's Triangles-字符串 (2014ACM/ICPC亚洲区广州站-重现赛)
Little Zu Chongzhi's Triangles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/512000 ...
- 简单几何(判断矩形的位置) UVALive 7070 The E-pang Palace(14广州B)
题目传送门 题意:给了一些点,问组成两个不相交的矩形的面积和最大 分析:暴力枚举,先找出可以组成矩形的两点并保存起来(vis数组很好),然后写个函数判断四个点是否在另一个矩形内部.当时没有保存矩形,用 ...
随机推荐
- OpenGL之路(五)制作旋转飞机模型
#include <gl/glut.h> #include <gl/GLU.h> #include <gl/GL.h> #pragma comment(lib, & ...
- MySQL安装、安装时未提示输入密码、如何修改密码小结
http://blog.csdn.net/fr555wlj/article/details/54971412
- 微信公众号菜单与应用交互session
http://www.cnblogs.com/yank/p/3476874.html http://blog.csdn.net/zmhawk/article/details/43671195 http ...
- SideBar---fixed定位
<style> /*外层fixed*/ body{ width:2000px; height:2000px; background:#000; } .wrap { position: ...
- 分段控制器--UISegmentedControl 基本用法
http://blog.csdn.net/heng615975867/article/details/43527295 http://blog.csdn.net/gf771115/article/de ...
- Identifier expected after this token
Cursor cursor = db.query(true, "user", new String[]{"id","mode"}, &quo ...
- 【CQ18阶梯赛第一场】题解
[A-风格不统一如何写程序] 输入字符串,得到长度,对于每个字符:如果是大写,则改为:‘_’+小写:如果是‘_’则忽略‘_’,并且把后面的小写改为大写. #include<cstdio> ...
- angularJS ng-if的用法
ng-if主要是用来判断是否显示,也可以做为而者选择其中一个的方法,满足判断条件ng-if="变量名" 显示,否者不显示,也可以用ng-if="!变量名"取反, ...
- 你真的懂redis吗?
Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难.作为一名在互联网技术行业打击过成百上千名[请允许我夸张一下]的资深技术面试官 ...
- 微信小程序在线支付功能使用总结
最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出 ...