zoukankan      html  css  js  c++  java
  • 51Nod-1414-冰雕

    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

    题解: 

    开始没有理解题意, 后来才知道是要按照等距采数。 (直接用暴力就可能解决)

    #include <cstdio> 
    const int MAXN = 20000 + 5; 
    int n, ans, num[MAXN]; 
    
    int main(){
    	while(scanf("%d", &n) != EOF){
    		ans = 0; 
    		for(int i=0; i<n; ++i){
    			scanf("%d", &num[i]);
    			ans += num[i]; 
    		}
    		for(int i=2; i<=n/3; ++i){
    			if(n%i == 0){
    				for(int j=0; j<i; ++j){
    					int tmp = 0; 
    					for(int k=j; k<n; k+=i){
    						tmp += num[k]; 
    					}
    					if(tmp > ans){
    						ans = tmp; 
    					}
    				}
    			}
    		}
    		printf("%d
    ", ans );
    	}
    	return 0; 
    }
    

      

  • 相关阅读:
    周末复习所接触到的知识点
    新增一些需要记住的知识点和坑
    讨厌烦人的编码问题''
    dictionary 字典相关操作
    一些列表的基础知识和操作
    简单字符串语句
    一些简单的str语句
    c#学习之前言
    第六课时之HTML标题
    第五课时之HTML属性
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/6389834.html
Copyright © 2011-2022 走看看