POJ1948Triangular Pastures(DP)
POJ1948http://poj.org/problem?id=1948
题目大意就是说给你n个木棍让你用它们摆成一个三角形 使得这个三角形的面积最大。
这个题我之前想的时候一直纠结怎么通过之前的三角形面积推导出加上一条木棍后的面积,结果一直没有想明白,而且总周长达到了1600,他的平方肯定会超时才对。后来看了网上的题解才明白其实DP求出来的并不是这些三角行是面积,而是求出通过这n个木棍可以构成哪些边长组合的三角形,最后再一一比较这些三角形的面积。
至于判断三角形,由于最长的边也不可能超过三角形周长的一半,也就是800,所以最后的结果就是800*800自然不会超时。
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a < b ? a : b)
#define mem0(a) memset(a,0,sizeof(a)) typedef long long LL;
const double eps = 1e-;
const int MAXN = ;
const int MAXM = ; bool DP[][];
int len[], tot, N; bool Judge(int a,int b,int c)
{
if(a+b>c && a+c>b && b+c>a) return true;
return false;
} double area(int a, int b, int c)
{
double p = (double)(a+b+c)/2.0;
return sqrt(p*(p-a)*(p-b)*(p-c));
} int main()
{
while(~scanf("%d", &N))
{
tot = ; mem0(DP);
for(int i=;i<N;i++)
{
scanf("%d", &len[i]);
tot += len[i];
}
int half = tot/;
DP[][] = ;
for(int i=;i<N;i++)
{
for(int j=half;j>=;j--)
{
for(int k=half;k>=;k--)
{
if((j>=len[i]&&DP[j-len[i]][k]) || (k>=len[i]&&DP[j][k-len[i]]))
{
DP[j][k] = ;
}
}
}
}
double ans = -;
for(int i=;i<=half;i++)
{
for(int j=;j<=half;j++)
{
if(DP[i][j] && Judge(i,j,tot-i-j))
{
ans = max(ans, *area(i,j,tot-i-j));
}
}
}
printf("%d\n", (int)ans);
}
return ;
}
POJ1948Triangular Pastures(DP)的更多相关文章
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
- 最长公共子序列长度(dp)
/// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...
随机推荐
- UVA 10061 How many zero's and how many digits ? (m进制,阶乘位数,阶乘后缀0)
题意: 给出两个数字a和b,求a的阶乘转换成b进制后,输出 (1)后缀中有多少个连续的0? (2)数a的b进制表示法中有多少位? 思路:逐个问题解决. 设a!=k. k暂时不用直接转成b进制. (1 ...
- /etc/selinux/config
/etc/selinux/configSELINUX=disabled改成了SELINUX=enforcing机器无法启动 linux无法启动怎么解决:[1]selinux配置错误 SELinux 入 ...
- 20160131.CCPP体系详解(0010天)
程序片段(01):Test.c+NewTest.c 内容概要:题目测试 ///Test.c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h&g ...
- HiveQL 与 SQL的异同
1 select 别名 (1)别名一定要加as 例:select ID as stuID from students (2) Hive QL不支持在group by, order by 中使用sele ...
- 【英语】Bingo口语笔记(3) - 无所谓
what's in it for me? 这对我有什么好处?
- C++调试 输出数组内容和数组名
#include <cstdio> using namespace std; //函数定义 #define printArr(arr,n,format) \ printf("%s ...
- Bootstrap学习之路(2)---导航组件
在bootstrap中,导航条的样式都依赖于.nav类,而样式又分为多种,如: 标签页的样式为:.nav-tabs <ul class="nav nav-tabs"> ...
- Oracle锁表(转载)
锁定类型 行级锁 表级锁行级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行 ...
- jquery checkbox勾选取消勾选的诡异问题
jquery checkbox勾选/取消勾选的诡异问题jquery checkbox勾选/取消勾选的诡异问题 <form> 你爱好的运动是?<input type=&q ...
- static用法总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 一.面向过程设计中的st ...