AT_abc178_d 题解
本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。
题目简述
给定一个正整数 \(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\),并且空格数即可插板的位置数也会发生变化:
\]
隔板数依然不变,是 \(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;
}
提交记录:
\]
AT_abc178_d 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- Flutter(一):MAC的Flutter安装指南
官网地址 官网: https://flutter.dev Github: https://github.com/flutter/flutter Git的核心分支包括master.dev.stable. ...
- 腾讯redis2.3集群搭建
环境规划: IP 主机名 组件 配置 备注 192.168.3.81 node1 8核16G 磁盘X2-50G 没有8核16G无法添加服务器 192.168.3.82 node2 cache,prox ...
- redis安装和基础使用
redis安装 mkdir /server/tools -p cd /server/tools echo 'PATH=/usr/local/redis/src:$PATH' >>/etc/ ...
- js 实现简易时钟效果
大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...
- WIn32 C++ 消息处理函数 问题
这个消息处理这个 Winproc 这个 接收到网络信息 在自己的函数用完后可以选择向系统路由传递这个网络消息接收到的数据原型 你处理完,系统也处理,不想让系统处理可以不将接受到的那几个变量啊数据啊,就 ...
- 泛型模板化设计DEMO
泛型模板化设计DEMO 1. 定义Result泛型类 package com.example.core.mydemo.java.fanxing; public class Result<T> ...
- skywalking启动配置agent及数据储存对数据源(mysql,es)版本要求
skywalking启动配置agent及数据储存对数据源(mysql,es)版本要求 # skywalking-agent.jar的本地磁盘路径-javaagent:D:\SkyWalking\sky ...
- 微服务引入swagger生成接口的json导入到yapi配置方法 数据管理 开启url导入
微服务引入swagger生成接口的json导入到yapi配置方法 数据管理 开启url导入 yapi安装参考window10 yapi安装 swagger配置 及 Error: getaddrinfo ...
- .Net8 AddKeyedScoped键值key注册服务异常
异常描述:This service descriptor is keyed. Your service provider may not support keyed services. 场景:.Net ...
- vue cli4.0项目引入typescript
现有的项目是采用vue cli4.0脚手架生成的,现在想要引入typescript. 1.执行安装命令 npm install --save-dev typescript npm install -- ...