zoukankan      html  css  js  c++  java
  • 1414 冰雕

    1414 冰雕

    题目来源: CodeForces

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题

    白兰大学正在准备庆祝成立256周年。特别任命副校长来准备校园的装扮。

    校园的中心竖立着n个冰雕。这些雕像被排在一个等分圆上,因此他们形成了一个正n多边形。这些冰雕被顺针地从1到n编号。每一个雕有一个吸引力t[i].

    校长来看了之后表示不满意,他想再去掉几个雕像,但是剩下的雕像必须满足以下条件:

    ·        剩下的雕像必须形成一个正多边形(点数必须在3到n之间,inclusive),

    ·        剩下的雕像的吸引力之和要最大化。

    请写一个程序帮助校长来计算出最大的吸引力之和。如果不能满足上述要求,所有雕像不能被移除。

    Input

    单组测试数据。 第一行输入一个整数n(3≤n≤20000),表示初始的冰雕数目。 第二行有n个整数t[1],t[2],t[3],…,t[n],表示每一个冰雕的吸引力(-1000≤t[i]≤1000),两个整数之间用空格分开。

    Output

    输出答案占一行。

    Input示例

    8

    1 2 -3 4 -5 5 2 3

    6

    1 -2 3 -4 5 -6

    Output示例

    14

    9

     

     

    //必然是 n 的因子,才能剩下的数为正多边形,然后枚举一下多边形的所有情况,暴力枚举找最大

     1 # include <cstdio>
     2 # include <cstring>
     3 # include <cstdlib>
     4 # include <iostream>
     5 # include <vector>
     6 # include <queue>
     7 # include <stack>
     8 # include <map>
     9 # include <bitset>
    10 # include <sstream>
    11 # include <set>
    12 # include <cmath>
    13 # include <algorithm>
    14 # pragma  comment(linker,"/STACK:102400000,102400000")
    15 using namespace std;
    16 # define LL          long long
    17 # define pr          pair
    18 # define mkp         make_pair
    19 # define lowbit(x)   ((x)&(-x))
    20 # define PI          acos(-1.0)
    21 # define INF         0x3f3f3f3f3f3f3f3f
    22 # define eps         1e-8
    23 # define MOD         1000000007
    24 # define MX          20005
    25 /**************************/
    26 int dat[MX];
    27 
    28 int main()
    29 {
    30     int n, ans= 0;
    31     scanf("%d",&n);
    32     for (int i=1;i<=n;i++)
    33     {
    34         scanf("%d",&dat[i]);
    35         ans+=dat[i];
    36     }
    37     for (int i=2;i<=n;i++)
    38     {
    39         if (n%i==0)
    40         {
    41             int pt = n/i; // 点数
    42             if (pt<3) break;
    43             int star=1;
    44             while (star<=i)
    45             {
    46                 int tp=0;
    47                 for (int j=star;j<=n;j+=i)
    48                     tp+=dat[j];
    49                 ans = max(ans,tp);
    50                 star++;
    51             }
    52         }
    53     }
    54     printf("%d
    ",ans);
    55     return 0;
    56 }
    View Code

     

  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/7474782.html
Copyright © 2011-2022 走看看