洛谷链接&Atcoder 链接

本篇题解为此题较简单做法较少码量,并且码风优良,请放心阅读。

题目简述

给定一个正整数 \(S\),问有多少个数满足以下条件:

  • 序列中必须为 \(\ge 3\) 的正整数。
  • 序列中的和必须为 \(S\)。

思路

首先想到组合数学,本题可通过组合数学插板法解决。

引入:例题,求 \(n\) 个苹果分为 \(k\) 组的方案数每组苹果个数仅需 \(\ge 1\)。

那么这道题就可转化为:

如图,共有 \(n\) 个苹果用 \(k-1\) 个隔板隔开 \(k\) 组,即从 \(n-1\) 个空中选 \(k-1\) 个空插隔板,所以答案即为 \(C_{n-1}^{k-1}\)。

注意:隔板不能重合也不能在两边,因为每组苹果个数需 \(\ge 1\)。

现在再来看此题,发现每组需 \(\ge 3\) 且组数不确定,所以需要枚举组数 \(i\) 从 \(1\) 到 \(n/3\),并且空格数即可插板的位置数也会发生变化

\[n-1 \to n-2 \times i-1
\]

隔板数依然不变,是 \(i-1\)。所以对于此题,方案数即为 \(C_{n-2 \times i-1}^{i-1}\)。

接下来就需要解决组合数的计算了,因为此题的数据范围不大,所以就可以用杨辉三角预处理组合数。学过组合数的同学应该都学过,这里直接说结论:杨辉三角的第 \(n\) 行的第 \(i\) 个数即为 \(C_n^i\) 的值

预处理如下(预处理过程中也要模 \(1000000007\)):

for(int i = 0; i <= n; i ++) {
C[i][0] = C[i][j] = 1;
for(int j = 1; j < i; j ++)
C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % MOD;
}

经过以上分析及部分代码讲解,基本的代码框架就很清晰了,下面是具体代码实现

#include<iostream>
using namespace std;
#define MOD 1000000007 int S, C[2005][2005]; // 组合数数组
long long ans = 0; // 记录答案,可不开 long long int main() {
cin >> S;
for(int i = 0; i <= S; i ++) {
C[i][0] = C[i][j] = 1;
for(int j = 1; j < i; j ++)
C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % MOD; // 杨辉三角预处理组合数
}
// 枚举组数
for(int i = 1; i <= S / 3; i ++)
ans = (ans + C[S - 2 * i - 1][i - 1]) % MOD; // 累计答案
cout << ans << endl; // 输出答案,换行好习惯
return 0;
}

提交记录:

\[\text{The End!}
\]

AT_abc178_d 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. WPF插件之 - PropertyChanged.Fody使用详解

    总目录文章目录总目录一.PropertyChanged.Fody是什么?二.PropertyChanged.Fody的安装三.PropertyChanged.Fody的功能1. 特性1 实现属性通知的 ...

  2. cmd命令行设置 windows 设置环境变量

    设置用户级别的环境变量 :: 设置新参数 JAVA_HOME1 setx JAVA_HOME1 "c:\test"; exit; echo "%JAVA_HOME1%&q ...

  3. linux扩展分区

    linux扩展分区 1.准备工作 系统版本:ubuntu20.04 工具:一个安装了ubuntu系统的系统U盘或者ubuntu系统制作的启动盘 2.缩小分区 要扩展某一个分区,再没有空闲空间时需要从其 ...

  4. Yii 实现数据库SUM操作

    方法一:这种方法有个坑儿,就是as 后面的别名,必须是属性范围内的名字. $criteria = new CDbCriteria(); $criteria->select = 'sum(amou ...

  5. mysql binlog查看指定数据库

    1.mysql binlog查看指定数据库的方法 MySQL 的 binlog(二进制日志)主要记录了数据库上执行的所有更改数据的 SQL 语句,包括数据的插入.更新和删除等操作.但直接查看 binl ...

  6. 《Android开发卷——自定义日期选择器(三)》

                 继 <Android开发卷--自定义日期选择器(一)>:http://blog.csdn.net/chillax_li/article/details/19047 ...

  7. jsp表单提交中的逻辑判断

    针对于表单 通常情况下  我们都是表单提交 提交的路径为以下: 提交的按钮的type="submit" 当我们想在表单提交前增加一个逻辑判断   我们就需要把button中的typ ...

  8. 『手撕Vue-CLI』完善提示信息

    前言 经过『手撕Vue-CLI』自动安装依赖,已经实现了自动安装依赖的功能. 然而,虽然项目已复制并安装依赖,但其提示信息并不够友好,于是我试着去运行了一下vue create,发现其提示信息是这样的 ...

  9. MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程

    MoneyPrinterPlus是一款使用AI大模型技术,一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上的轻松赚钱工具. 之前有出过一期基本的介绍,但是后台收 ...

  10. C# 循环枚举

    foreach (int eemun in Enum.GetValues(typeof(类名))) { string sName = Enum.GetName(typeof(类名), eemun);/ ...