[CodeForces158D]Ice Sculptures[暴力]

题目链接:[CodeForces158D]Ice Sculptures[暴力]

题意分析:Berland大学周年庆,有N个冰雕等距地站成一个圈,每个冰雕都有自己的价值,现在你可以融化掉其中的一些,但必须使得剩余的冰雕围城的是正多边形,冰雕不可移动,问:怎么样做可以使得冰雕的价值总和最大,最大是多少?

解题思路:题目给出了3s的时间限制,而冰雕有20000个,可以暴力着对每个答案进行遍历。

个人感受:没想过暴力前,真不知道这题该怎么做。。。。。

具体代码如下:

#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 2e4 + 111;

int t[MAXN];

int main() {
    int ans = 0;
    int n; scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &t[i]);
        ans += t[i];  //让ans初始为总和
    }
    for (int i = 2; i <= n / 3; ++i) //至少要留下3个雕像,可暴力的范围就缩小了三倍
    {
        if (n % i == 0) //当可以删除雕像后得到正多边形时
        {
            for (int k = 1; k <= i; ++k) //考虑从第k个开始等间隔融化雕像
            {
                int tem = 0;
                for (int j = k; j <= n; j += i)
                    tem += t[j];
                if (tem > ans)
                    ans = tem;
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}

你可能感兴趣的:(codeforces,暴力)