POJ 1948 TRIANGULAR PASTURES(背包问题)
来源:互联网 发布:淘宝模特小倩 编辑:程序博客网 时间:2024/05/21 09:56
原文:http://blog.acmj1991.com/?p=604
题意:给你n根火柴,让你用这些火柴拼凑出一个面积最大的三角形,求这个三角形的面积
思路:想了一阵子,因为一根火柴不能同时出现在同一个边中,所以开一个二维数组
dp[i][j]记录是否存在边长为i和j的三角形,为了不重复所以从后往前推
S=sqrt(x*(x-a)*(x-b)*(x-c)); (x=S/2)
#include<stdio.h>#include<math.h> #define maxN 1600bool dp[maxN][maxN];int max(int x,int y){return x>y?x:y;} int main(){ int len[45],n,sum=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&len[i]); sum+=len[i]; } dp[0][0]=1; for(int i=0;i<n;i++) for(int j=sum/2;j>=0;j--) for(int k=sum/2;k>=0;k--) if(j>=len[i]&&dp[j-len[i]][k]||k>=len[i]&&dp[j][k-len[i]]) dp[j][k]=1; int maxx=-1; for(int i=1;i<sum/2;i++) for(int j=1;j<sum/2;j++) if(dp[i][j]) { int k=sum-i-j; if(!(i+j>k&&i+k>j&&k+j>i))continue; double m=(i+j+k+0.0000001)/2.0; int s=100*sqrt(double(m*(m-i)*(m-j)*(m-k))); maxx=max(maxx,s); } printf("%d\n",maxx);}
- POJ 1948 TRIANGULAR PASTURES(背包问题)
- poj 1948 Triangular Pastures 01背包
- poj 1948 Triangular Pastures(二维01背包)
- poj 1948 Triangular Pastures 二维背包
- poj 1948 Triangular Pastures 二维01背包
- 0-1背包-poj-1948-Triangular Pastures
- POJ 1948 Triangular Pastures(01背包)
- poj 1948 Triangular Pastures 二维01背包
- POJ 1948 Triangular Pastures(二维背包)
- poj 1948 Triangular Pastures
- poj 1948 Triangular Pastures
- POJ 1948 Triangular Pastures
- poj 1948 Triangular Pastures
- poj 1948 Triangular Pastures
- poj 1948 Triangular Pastures
- poj 1948 Triangular Pastures
- poj 1948 Triangular Pastures
- pku 1948 Triangular Pastures(背包)
- Asp.net导出Excel(三)
- 安装vs2010后安装MSDN文档的方法
- POJ 1985 COW MARATHON
- POJ 1952 BUY LOW, BUY LOWER(DP)
- ExtJS中layout的9种布局风格
- POJ 1948 TRIANGULAR PASTURES(背包问题)
- 微软算法面试题
- Android App Widgets
- POJ 1833 排列
- 信访项目
- 获取字符串的长度 (汉字占两个字节)
- POJ 1828 MONKEYS’ PRIDE(DP)+POJ 2726
- Silverlight获取浏览器的宽和高
- 使用VS2008打开VS2010的解决方案