数的划分
  gBkHYLY8jvYd 2023年11月22日 17 0

[NOIP2001 提高组] 数的划分

题目描述

将整数 数的划分_ci 分成 数的划分_#include_02 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:数的划分_#include_03数的划分_ios_04,下面三种分法被认为是相同的。

数的划分_ios_05;
数的划分_ci_06;
数的划分_ios_07.

问有多少种不同的分法。

输入格式

数的划分_#include_08数的划分_#include_09数的划分_ci_10

输出格式

数的划分_ci_11 个整数,即不同的分法。

样例 #1

样例输入 #1

7 3

样例输出 #1

4

提示

四种分法为:
数的划分_ios_05;
数的划分_ci_13;
数的划分_ci_14;
数的划分_#include_15.

【题目来源】

NOIP 2001 提高组第二题

#include <cstdio>
#include <iostream>
using namespace std;

int main()
{
    int n,k;
    cin >> n >> k;
    int ans = 0;
    for(int i1 = 1; i1 <= n / 2; i1 ++)
    {
        for(int i2 = i1; i2 <= n / 2 ;i2 ++)
        {
            for(int i3 = i2; i3 <= n / 2; i3 ++)
            {
                for(int i4 = i3; i4 <= n / 2; i4 ++)
                {
                    for(int i5 = i4; i5 <= n / 2; i5 ++)
                    {
                        if(k == 2)
                        {
                            if(i5 <= n - i5) ans ++;
                        }
                        else if(k == 3)
                        {
                            if(i4 <= n - i4 - i5 && i5 <= n - i4 - i5) ans ++;
                        }
                        else if(k == 4)
                        {
                            if(i4 <= n - i4 - i5 - i3 && i5 <= n - i4 - i5 - i3 && i3 <= n - i3 - i4 - i5) ans ++;
                        }
                        else if(k == 5)
                        {
                            if(i4 <= n - i4 - i5 - i3 - i2 && i5 <= n - i4 - i5 - i3 - i2 && i3 <= n - i3 - i4 - i5 - i2 && i2 <= n - i3 - i4 - i5 - i2) ans ++;
                        }
                        else if(k == 6)
                        {
                            if(i4 <= n - i4 - i5 - i3 - i2 - i1 && i5 <= n - i4 - i5 - i3 - i2 - i1 && i3 <= n - i3 - i4 - i5 - i2 - i1 && i2 <= n - i3 - i4 - i5 - i2 - i1 && i1 <= n - i3 - i4 - i5 - i2 - i1) ans ++;
                        }
                    }
                    if(k < 3) break;//保证当k<3只能使这层的循环只能运行一次
                }
                if(k < 4) break;//保证当k<4只能使这层的循环只能运行一次
            }
            if(k < 5) break;//保证当k<5只能使这层的循环只能运行一次
        }
        if(k < 6) break;//保证当k<6只能使这层的循环只能运行一次
    }
    printf("%d\n",ans);
    return 0;
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月22日 0

暂无评论

推荐阅读
gBkHYLY8jvYd
作者其他文章 更多

2023-12-12

2023-12-11

2023-12-10

2023-12-10

2023-12-09

2023-12-08

2023-12-06

2023-12-06

2023-12-06