• 所谓的二维背包Triangular Pastures POJ 1948


    这题WA了很多遍,要不就是测试数据 3 1 2 3 输出173,要不就是6 5 5 5 5 5 5  输出-1.甚至有时候把程序改的题目上的测试数据都过不了,各种悲摧,其实我喜欢边写程序边想,这是个很差的习惯,我一定要改!!!这题是看别人的提示写出来的,首先设bool型数组f,令 f[i][j]表示一边长为i,另一边长为j的边可以组合出来,然后在所有可以组合出来的情形中找能组合成三角形且面积最大的。f[i][j]能组合出来的条件是对于加入新边li来说是f[i-li][j] 或f[i][j-li]能组合出来,初始条件是f[0][0]能组合出来。因为题目中说了要用掉所有的栏杆,所以我只考虑两条边,剩下的一条边用总长剪这两条边的长就知道了,然后为了这两天边的列举有对称性,可假设i>= j也算是减少运算量吧。能组成三角形的条件是任意两边之和大于第三边,我令第一条边长i <= (总长-1)/2(稍微想一下就知道了,分奇偶讨论一下)第二条边长<= i且和 i一起满足2*(i+j) > 总长,这样的三条边就一定是能组成三角形的了``````

    View Code
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 bool f[900][900];
     5 int main()
     6 {
     7     int n,l[50];
     8     int sum =0;
     9     scanf("%d",&n);
    10     for(int i=0; i< n; i++)
    11     {
    12         scanf("%d",&l[i]);
    13         sum += l[i];
    14     }
    15     int m1;
    16     m1=(sum-1)/2;
    17     memset(f,false,sizeof(f));
    18     f[0][0] = true;
    19     for(int i=0; i< n; i++)
    20     {
    21         for(int j = m1; j >= 0; j--)
    22         {
    23             for(int k = j; k>=0; k--)
    24             {
    25                 if((j>=l[i] &&f[j-l[i]][k])  || (k >= l[i] && f[j][k - l[i]]))
    26                     f[j][k] = true;
    27             }
    28         }
    29     }
    30     double max = 0;
    31     bool flag= false;
    32     for(int j=m1; j>0; j--)
    33     {
    34         for(int k = j; 2*(j+k) > sum; k--)
    35         {
    36             double  t=(sum-2*j)*(sum-2*k)*(2*(j+k)-sum)/8.0;
    37             if(f[j][k] && t> max)
    38             {
    39                 flag =true;
    40                 max = t;
    41             }
    42         }
    43     }
    44     if(!flag)
    45         printf("-1\n");
    46     else
    47     {
    48         max = sum/2.0*max;
    49         int d = (floor)(sqrt(max)*100);
    50         printf("%d\n",d);
    51     }
    52     return 0;
    53 }
  • 相关阅读:
    博客园停更...
    Linux-常用命令汇总
    Linux-目录结构
    Mysql-python连接操作数据库
    Mysql-概念及常用命令
    Mysql-Sql查询汇总
    Mysql-Sql增删改查
    Mysql-Navicat破解使用
    Mysql-环境配置及问题解决
    Fiddler-AutoResponder替换资源
  • 原文地址:https://www.cnblogs.com/allh123/p/2985260.html
Copyright © 2020-2023  润新知