• POJ 1948 Triangular Pastures (二维01背包)


    题目链接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]]  
    #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;
    }
    
    举杯独醉,饮罢飞雪,茫然又一年岁。 ------AbandonZHANG
  • 相关阅读:
    jvmidea远程调试服务
    JVMvisualVM远程连接服务器
    C语言isalpha()函数
    创建索引时加online和不加online有什么区别
    List<String>与逗号分隔的字符串互转
    突发感想(计算机原理)
    电脑上快捷键
    idm 破解注册
    8. 递归
    普通话水平测试 测试完后,一个月后即可查询成绩
  • 原文地址:https://www.cnblogs.com/AbandonZHANG/p/4114186.html
Copyright © 2020-2023  润新知