POJ 1948 Triangular Pastures (二维01背包)
2012-12-10 17:12
323 查看
题目链接:http://poj.org/problem?id=1948
题目大意:给最多40根木棍,每根长度不超过40,要用完所有的木棍构成面积最大的三角形,求出最大的面积。
思路:设f[i][j]为第一条边长度为i,第二条边长度为j是否可行
状态转移方程:
if(j>=a[i])
f[j][k]=f[j][k]||f[j-a[i]][k]
if(k>=a[i])
f[j][k]=f[j][k]||f[j][k-a[i]]
题目大意:给最多40根木棍,每根长度不超过40,要用完所有的木棍构成面积最大的三角形,求出最大的面积。
思路:设f[i][j]为第一条边长度为i,第二条边长度为j是否可行
状态转移方程:
if(j>=a[i])
f[j][k]=f[j][k]||f[j-a[i]][k]
if(k>=a[i])
f[j][k]=f[j][k]||f[j][k-a[i]]
#include #include #include using namespace std; int f[810][810]; int a[50]; void swap(int &a, int &b){ int tmp = a; a = b; b = tmp; } int san(int a,int b,int c) { if(a > b) swap(a,b); if(a > c) swap(a,c); if(b > c) swap(b,c); if(a + b < c) return -1; double p = (a + b + c) * 1.0 / 2; double ret; ret = sqrt(p * (p-a) * (p-b) * (p-c)) * 100; return (int)ret; } int main(){ int n; scanf("%d",&n); int sum = 0; for (int i = 0; i < n; i ++){ scanf("%d",&a[i]); sum += a[i]; } memset(f, 0, sizeof(f)); f[0][0] = 1; int ban = sum / 2; for (int k = 0; k < n; k ++){ for (int i = ban; i >= 0; i --){ for (int j = ban; j >= 0; j --){ if (i - a[k] >= 0){ f[i][j] = f[i][j] | f[i - a[k]][j]; } if (j - a[k] >= 0){ f[i][j] = f[i][j] | f[i][j - a[k]]; } } } } int max = -1; for (int i = 1; i <= ban; i ++){ for (int j = 1; j <= ban; j ++){ if (f[i][j]){ if (san(i, j, sum - i - j) > max){ max = san(i, j, sum - i - j); } } } } printf("%d\n", max); return 0; }
相关文章推荐
- poj 1948 Triangular Pastures(二维01背包)
- POJ 1948 Triangular Pastures (二维01背包)
- poj 1948 Triangular Pastures 二维背包
- poj 1948二维01背包
- http://poj.org/problem?id=1948..二维01背包。。
- 携程第二场 Poj 1182 食物链(带权并查集) Poj 1948 Triangular Pastures Poj(dp二维背包) 1740 A New Stone Game(博弈)
- POJ -- 1948 二维背包问题
- POJ 1948 (Triangular Pastures)二维背包 DP/DFS
- POJ 1948 Triangular Pastures 二维 0-1背包
- POJ 1948 Triangular Pastures 二维 0-1背包
- poj 1948 Triangular Pastures (二维背包dp)
- POJ - 1837 Balance 天平(二维01背包)
- poj 1948 Triangular Pastures 二维01背包
- POJ 1948 Triangular Pastures(二维背包)
- poj 1948 二维01背包
- poj 1948 二维背包
- DP:Cow Exhibition(POJ 2184)(二维问题转01背包)
- poj 1948 Triangular Pastures(二维0/1背包)
- 所谓的二维背包Triangular Pastures POJ 1948
- POJ 1948 Triangular Pastures(01背包)