1. 程式人生 > >51nod1414 冰雕(暴力列舉)

51nod1414 冰雕(暴力列舉)

題目是這樣的:

1414 冰雕

白蘭大學正在準備慶祝成立256週年。特別任命副校長來準備校園的裝扮。

校園的中心豎立著n個冰雕。這些雕像被排在一個等分圓上,因此他們形成了一個正n多邊形。這些冰雕被順針地從1n編號。每一個雕有一個吸引力t[i].

校長來看了之後表示不滿意,他想再去掉幾個雕像,但是剩下的雕像必須滿足以下條件:

·        剩下的雕像必須形成一個正多邊形(點數必須在3n之間,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

這個題看後總想找出一個好的的解決方案,但是列舉竟然就能破解,有時候還是不要想太多的好。

本題這裡直接列舉距離編號最小的冰雕等距的冰雕的引力,計算其和,通過比較保留最大值。

程式碼:

#include<cstdio>
int t[20005];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&t[i]);
	}
	int Max=-99999999;
	for(int i=1;i<=n/3;i++){
		if(n%i==0){
			for(int j=0;j<i;j++){
				int sum=0;
				for(int k=j;k<n;k+=i){
					sum+=t[k];
				}
				if(sum>Max) Max=sum;
			}
		}
	}
	printf("%d",Max);
	return 0; 
 }