分析
瞎想一波:将一个正n边形切成正多边形,剩余的边数必将是n的因数。
所以我们直接枚举全部剩余边形的最大和就行了
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[20001],s;
int fac[20001],sfac,mx,k,ff;
void cfac()//求因数
{
for(int i=2;i<n;i++)
{
if(n%i==0)
{
sfac++;
fac[sfac]=i;
}
}
}
int tp()
{
if(sfac==0||n==3)
{
cout<<s;
return 1;
}
return 0;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
s+=a[i];
}
mx=s;
cfac();
if(tp()==1) return 0;
for(int i=0;i<sfac;i++)
{
int tmp=fac[i];
k=1;
while(tmp--)//枚举剩余变数边数
{
int cnt=0,side=0;
for(int j=k;j<=n;j+=fac[i])
{
cnt+=a[j];
side++;
}
if(side>=3)
{
mx=max(mx,cnt);
}
k++;
}
}
cout<<mx;
return 0;
}