• ZOJ2688 Requirements


      原题传送:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2688

      这题在武森的论文《浅谈信息学竞赛中的“0”和“1”》中有很精彩的讲解。

      这道题暴力枚举肯定TLE,转而想到消去绝对值符号,式子前面加上“+”和“-”两个符号,有5维,则一共有25种情况,而总的最大值是这25种情况的最大值减最小值。对于每种情况,都可以O(n)求出最大值和最小值。总复杂度为O(n*2k ),可以承受了。

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #define N 100005
     4 
     5 double a[N][32], data[5];
     6 
     7 void dfs(int i, double v, int d, int k)
     8 {
     9     if(d == 5)
    10     {
    11         a[i][k] = v;
    12         return ;
    13     }
    14     dfs(i, v + data[d], d + 1, k * 2 + 1);
    15     dfs(i, v - data[d], d + 1, k * 2);
    16 }
    17 
    18 int main()
    19 {
    20     freopen("data.in", "r", stdin);
    21     int n, i, j;
    22     double max, min, ans;
    23     while(scanf("%d", &n), n)
    24     {
    25         for(i = 0; i < n; i ++)
    26         {
    27             for(j = 0; j < 5; j ++)
    28             {
    29                 scanf("%lf", &data[j]);
    30             }
    31             dfs(i, 0.0, 0, 0);
    32         }
    33         ans = 0.0;
    34         for(j = 0; j < 32; j ++)
    35         {
    36             max = a[0][j], min = a[0][j];
    37             for(i = 1; i < n; i ++)
    38             {
    39                 if(a[i][j] > max)
    40                     max = a[i][j];
    41                 if(a[i][j] < min)
    42                     min = a[i][j];
    43             }
    44             if(max - min > ans)
    45                 ans = max - min;
    46         }
    47         printf("%.2f\n", ans);
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    HDU 1074 Doing Homework 状态压缩dp
    通过pwnable.kr从零学pwn
    php四个常用类封装
    web安全(入门篇)
    GD库
    php上传文件那些事
    windows内网渗透的一些笔记
    有关linux内网渗透的一些笔记
    Xcode 6以后默认不支持armv7s架构
    关键字搜索后描红
  • 原文地址:https://www.cnblogs.com/huangfeihome/p/2729113.html
Copyright © 2020-2023  润新知