题目链接:[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;
}