zoukankan      html  css  js  c++  java
  • 台州 OJ 1554 Triangular Pastures

    题目意思是,有 n 个栅栏,每个栅栏的长度给出了,要求用这 n 个栅栏构成三角形,求面积最大的

    开先没看懂题目意思,不知道 n 个栅栏全部要用上。思路就是把两条边枚举出来,第三条边就知道了,然后把能构成三角形的面积都算出来,取最大值。

    代码:

    #include <iostream>
    #include <cstring>
    #include <cmath>
    using namespace std;
    
    const int MAX = 1600;
    
    int n;
    int dp[MAX][MAX];
    int v[MAX];
    
    int getArea(int a, int b, int c);
    
    int main(){
    //    freopen("input.txt", "r", stdin);
        
        int maxn = 0;
        cin >> n;
        for(int i=1; i<=n; i++){
            cin >> v[i];
            maxn += v[i];
        } 
        
        //枚举出两条边的所有值 
        memset(dp, 0, sizeof(dp));
        dp[0][0] = 1;
        for(int i=1; i<=n; i++){
            for(int j=maxn; j>=0; j--){
                for(int k=maxn; k>=0; k--){
                    if(dp[j][k]){
                        dp[j+v[i]][k] = 1;
                        dp[j][k+v[i]] = 1;
                    }
                }
            }
        }
        
        //求面积最大的 
        int ans = -1;
        for(int i=1; i<maxn; i++){
            for(int j=1; j<maxn; j++){
                if(dp[i][j]){
                    int k = maxn - i - j;
                    if(i + j <= k || i + k <= j || j + k <= i)
                        continue;
                    ans = max(ans, getArea(i, j, k));
                }
            }
        }
        
        cout << ans;
        
        return 0;
    }
    
    int getArea(int a, int b, int c){
        double p = (a + b + c)*1.0 / 2;
        return sqrt(p*(p-a)*(p-b)*(p-c)) * 100;
    }
  • 相关阅读:
    Python Day23
    Python Day22
    Python Day21
    Python Day20
    Python Day19
    Python Day18
    Python Day17
    python全栈开发 * 18 面向对象知识点汇总 * 180530
    python全栈开发 * 15知识点汇总 * 180621
    python全栈开发 * 14 知识点汇总 * 180530
  • 原文地址:https://www.cnblogs.com/lighter-blog/p/7265468.html
Copyright © 2011-2022 走看看