一个暴力的枚举,枚举组成正多边形需要对应覆盖原先的几条边,范围为(1,n/3),然后维护最大值就可以了,注意初始化为-inf.
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; int a[100500]; int main() { int n; while(~scanf("%d",&n)){ int sum=0; for(int i=0;i<n;i++){ scanf("%d",&a[i]); sum+=a[i]; } int thesum=-9999999; for(int i=2;i<=n/3;i++){ if(n%i==0){ for(int k=0;k<i;k++){ int tempsum=0; for(int j=k;j<n;j+=i){ tempsum+=a[j]; } if(tempsum>thesum) thesum=tempsum; //printf("thesum=%d\n",thesum); } } } if(thesum>sum) sum=thesum; printf("%d\n",sum); } }
原文:http://www.cnblogs.com/jifahu/p/5472203.html