51Nod - 1414 冰雕问题

白兰大学正在准备庆祝成立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
System Message  (题目提供者)
解释:首先看到这道题先想到的是求因子,但是怎么找到最大的吸引力,演草纸上画画,决定暴力解决
直接找到因子,例如n=6,因子是1,2,3,6,其实1,6不用考虑,正多边形相邻两边距离都是相等的,所以正三边形相邻两边距离为2,(设一开始每两边距离是1),n=8,那么正四边形每两边距离是2.    规律也就出来了2*3=6        2*4=8
代码:
 


#include<cstdio>
const int max=20000+5;
int n,i,sum,yinzi[max],a[max],ans;


int main()
{
      while(scanf("%d",&n)!=EOF)
      {
          ans=0;
          for(i=0;i<n;i++)
          {  scanf("%d",&a[i]);
              ans+=a[i];
          }
          //先计算现在的多边形的吸引力
          for(i=2;i<=n/3;i++)//求n的因子(除了1及其本身n)
          {


              if(n%i==0)
              {
                  for(int j=0;j<i;j++)//依次寻找新的多边形的吸引力
                    {   sum=0;
                        for(int k=j;k<n;k+=i)//等距,形成的正多边形相邻两边都等距
                        {
                            sum+=a[k%n];
                        }
                        if(ans<sum)
                            ans=sum;
                    }
            }
          }
          printf("%d\n",ans);
      }
      return 0;

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值