zoukankan      html  css  js  c++  java
  • poj 1032 Parliament 【思维题】

    题目地址:http://poj.org/problem?id=1032

    Parliament
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 17473   Accepted: 7371

    Description

    New convocation of The Fool Land's Parliament consists of N delegates. According to the present regulation delegates should be divided into disjoint groups of different sizes and every day each group has to send one delegate to the conciliatory committee. The composition of the conciliatory committee should be different each day. The Parliament works only while this can be accomplished.
    You are to write a program that will determine how many delegates should contain each group in order for Parliament to work as long as possible.

    Input

    The input file contains a single integer N (5<=N<=1000 ).

    Output

    Write to the output file the sizes of groups that allow the Parliament to work for the maximal possible time. These sizes should be printed on a single line in ascending order and should be separated by spaces.

    Sample Input

    7

    Sample Output

    3 4

    算法:将n从2开始进行分解,注意:每个被分解出来的数都必须是不同的。比如:6= 3+3; 3,3是不合法的!
    (1).若 n = 2 + 3 + ... + k + k ,不够减的数余下为k, 则将其转换成:n=3+4+..+k+(k+2);
    比如:13=2+3+4+4,则转换成:13=3+4+6
    (2).若不够减的数余下小于k,则将余下的n,从最大的数开始往前分配1。
    比如: 10=2+3+4+1; 则转换成:10=2+3+5;
    代码:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <math.h>
    #include <stack>
    #include <queue>
    #include <iostream>
    #include <string>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
        int n;
        int i, j;
        int a[1010];
        int e=0;
    
        scanf("%d", &n);
    
        for(i=2; i<=n; i++)
        {
            a[e++]=i;
            n=n-i;
        }
        if(n<a[e-1] && n>0 )
        {
            for(i=e-1; i>=0; i--)
            {
                a[i]++;
                n--;
                if(n==0) break;
            }
        }
        else if(n==a[e-1])
        {
            for(i=0; i<e; i++) a[i]++;
            a[e-1]++;
        }
        for(i=0; i<e; i++)
        {
            if(i==0) printf("%d", a[i]);
            else printf(" %d", a[i]);
        }
        printf("
    ");
        return 0;
    }
    
    
    
  • 相关阅读:
    matlab的特殊字符(上下标和希腊字母等)
    漫谈高数 特征向量物理意义
    小波变换
    泰勒级数
    关于均方差的一点知识
    论文笔记(4)-Deep Boltzmann Machines
    论文笔记(3)-Extracting and Composing Robust Features with Denoising Autoencoders
    论文笔记(2)-Dropout-Regularization of Neural Networks using DropConnect
    猪血豆腐
    离散时间系统结构
  • 原文地址:https://www.cnblogs.com/yspworld/p/4665609.html
Copyright © 2011-2022 走看看