计数dp+组合数学,CF 213B - Numbers

news2024/9/27 12:12:13

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

213B - Numbers


二、解题报告

1、思路分析

从0~9依次填写

对于0,如果要拿出 i 个位置填0,那么方案数为comb(n - 1, i),因为不能有前导0

对于1,如果要拿出 j 个位置填0,那么方案数为 cnt(n - i, j)

我们发现,我们在考虑1的时候,完全不需要考虑0具体是怎么放置的

于是定义状态 f(i, j) 为 剩余 i 个位置,填写数字j, j + 1...9的方案数

那么对于 f(i, j)

如果j > 0,f(i, j) = Σ f(i - k, j + 1) * comb(i, k)

如果j == 0, f(i, j) = Σ f(i - k, j + 1) * comb(i - 1, k)

显然可以滚动数组优化

2、复杂度

时间复杂度: O(N^2 U)空间复杂度:O(N U), U = 10

3、代码详解

 ​
#include <bits/stdc++.h>

// #define DEBUG

using i64 = long long;
using u32 = unsigned int;
using u64 = unsigned long long;

constexpr int inf32 = 1E9 + 7;
constexpr i64 inf64 = 1E18 + 7;
constexpr int P = 1E9 + 7;

constexpr int N = 100;
int fac[N + 1], invfac[N + 1];

int power(i64 a, i64 b) {
    int res = 1;
    for (; b; a = a * a % P, b >>= 1) {
        if (b & 1)
            res = res * a % P;
    }
    return res;
}

auto Finit = []{
	fac[0] = invfac[0] = 1;
	for (int i = 1; i <= N; ++ i)
	    fac[i] = 1LL * fac[i - 1] * i % P;

	invfac[N] = power(fac[N], P - 2);
	for (int i = N - 1; i; -- i)
	    invfac[i] = (i + 1LL) * invfac[i + 1] % P;
	return 0;
}();

int comb(int n, int m) {
	if (n < m) return 0;
	return 1LL * fac[n] * invfac[m] % P * invfac[n - m] % P;
}

void solve(){
	int n;
	std::cin >> n;

	std::array<int, 10> a;
	for (int i = 0; i < 10; ++ i)
		std::cin >> a[i];

	std::vector<int> f(n + 1);
	for (int i = a[9]; i <= n; ++ i)
		f[i] = 1;

	for (int i = 8; i; -- i) {
		for (int j = n; ~j; -- j) {
			int res = 0;
			for (int k = a[i]; k <= j; ++ k) {
				res += 1LL * f[j - k] * comb(j, k) % P;
				if (res >= P) res -= P;
			}
			f[j] = res;
		}
	}

	int res = 0;

	for (int j = n; ~j; -- j) {
		for (int k = a[0]; k <= j; ++ k) {
			res += 1LL * f[j - k] * comb(j - 1, k) % P;
			if (res >= P) res -= P;		
		}
	}

	std::cout << res;
}

auto FIO = []{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);
	return 0;
}();

int main() {
	#ifdef DEBUG
		freopen("in.txt", 'r', stdin);
		freopen("out.txt", 'w', stdout);
	#endif
	int t = 1;
	// std::cin >> t;
	while(t --)
		solve();
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[UVM]5.config机制 report 消息管理

1.config机制 &#xff08;1&#xff09;概述 SV只能例化后通过句柄访问&#xff0c;配置前必例化。 &#xff08;2&#xff09;uvm_config_db uvm_congfig_db就是关联数组&#xff0c;path和value组成。 传递配置对象&#xff08;config object&#xff09;就是传递句柄。 …

Ps:颜色模型、色彩空间及配置文件

颜色模型、色彩空间和配置文件是处理颜色的核心概念。它们虽然互相关联&#xff0c;但各自有不同的功能和作用。 通过理解这些概念及其关系&#xff0c;Photoshop 用户可以更好地管理和优化图像处理流程&#xff0c;确保颜色在不同设备和应用中的一致性和准确性。 颜色模型 Col…

ERP系统在IC设计行业的必要性

在当今这个科技日新月异的时代&#xff0c;集成电路(IC)设计行业作为信息技术发展的核心驱动力之一&#xff0c;正面临着前所未有的挑战与机遇。随着产品复杂度的提升、市场需求的快速变化以及全球供应链的紧密交织&#xff0c;如何高效管理设计资源、优化生产流程、提升响应速…

【Netty】实战:基于Http的Web服务器

目录 一、实现ChannelHandler 二、实现ChannelInitializer 三、实现服务器启动程序 四、测试 本文来实现一个简单的Web服务器&#xff0c;当用户在浏览器访问Web服务器时&#xff0c;可以返回响应的内容给用户。很简单&#xff0c;就三步。 一、实现ChannelHandler pack…

Spring之拦截器(HandlerInterceptor)

前言 在web开发中&#xff0c;拦截器是经常用到的功能&#xff0c;用于拦截请求进行预处理和后处理&#xff0c;一般用于以下场景&#xff1a; 日志记录&#xff0c;可以记录请求信息的日志&#xff0c;以便进行信息监控、信息统计、计算PV&#xff08;Page View&#xff09;等…

C++ 继承(二)

目录 1. 实现一个不能被继承的类 2. 友元与继承 3.继承与静态成员 4.多继承及其菱形继承问题 (1). 继承模型 (2). 虚继承 (2.1)虚继承解决数据冗余和二义性的原理 (3). 多继承中指针偏移问题 (4). IO库中的菱形虚拟继承 5. 继承和组合 1. 实现一个不能被继承的类 方法1…

内蒙古众壹集团:引领蒙东财税服务行业,成就企业发展新高度

内蒙古众壹企业管理集团有限公司自2019年成立以来&#xff0c;凭借卓越的服务和专业的团队&#xff0c;迅速成长为蒙东地区财税服务行业的先锋企业。 公司在成立初期&#xff0c;通过加盟慧算账平台&#xff0c;快速进入市场&#xff0c;并设立了多个分公司&#xff0c;逐步扩展…

Daily2:字体描边

有一个小的需求,需要对字体进行描边,一开始理解错了需求,以为要对字体镂空处理,然后尝试了许多做错了许多 后来发现是一个简单的描边处理,直接chatgpt就可以得出来一个简单的实现代码, class BorderTextView JvmOverloads constructor(context: Context, attrs: AttributeSet?…

读懂以太坊源码(3)-详细解析genesis.json

要想搞懂以太坊的源代码逻辑&#xff0c;必须要了解以太坊创世区块配置文件(genesis.json)的结构&#xff0c;以及每个配置参数的意义&#xff0c;创世配置文件&#xff0c;主要作用是设置链的ID&#xff0c;指定以太坊网络中硬分叉发生的区块高度&#xff0c;以及初始ETH数量的…

【系统分析师】-软件测试

目录 1、测试的类型 1.1、动态测试 1.1.1、黑盒法 1.1.2、白盒法 1.1.3、灰盒法 1.2、静态测试 2、测试阶段 2.1、单元测试 2.2、集成测试 2.3、确认测试 2.4、系统测试 3、性能测试 3.1、性能测试的目的 3.2、性能测试的类型 3.3、性能测试的步骤 5、测试设计…

【操作系统存储篇】Linux文件基本操作

目录 一、Linux目录 二、Linux文件的常用操作 三、Linux文件类型 一、Linux目录 Linux有很多目录&#xff0c;Linux一切皆是文件&#xff0c;包括进程、设备等。 相对路径&#xff1a;相对于当前的操作目录&#xff0c;文件位于哪个目录。 绝对路径 &#xff1a;从根目录开…

面对AI时代快车,你没必要跟车赛跑,而是应该先去考个驾照!

在当今人工智能领域&#xff0c;代码生成和编辑工具成为了开发者们手中的利器。昨天&#xff0c;零一万物公司再次展示了他们在开源社区中的领导地位&#xff0c;开源了 Yi-Coder 系列编程助手模型&#xff0c;这一举措不仅标志着该公司继今年5月开源Yi-1.5系列模型后的又一重大…

智能提醒助理系列-服务号静默登录

本系列文章记录“智能提醒助理”wx公众号 建设历程&#xff0c;记录实践经验、巩固知识点、锻炼总结能力。 本文介绍&#xff0c;如何让用户进入公众号之后就锁定用户&#xff0c;使用既注册&#xff0c;进入既可使用功能&#xff0c;去掉繁琐的登录认证流程。 一、需求出发点 …

告别单调,Xmind思维导图之后还有这三款神器,让学习工作更愉快

这年头信息量爆炸&#xff0c;我们得想办法把事情想清楚、把活儿排排好、学点新玩意儿。思维导图这东西&#xff0c;因为它画出来一目了然&#xff0c;用起来也简单&#xff0c;所以特别受学生们和上班的人的欢迎。在这么多画思维导图的软件里&#xff0c;Xmind因为功能全、界面…

02【SQL sever 2005数据库安装教程】

一、安装须知 1.安装数据库版本&#xff1a;SQL sever 2005 2.适用系统&#xff08;目前发现&#xff09;&#xff1a;Windows server 2008 R2 3.安装程序目录&#xff1a;SQL2005\SQL Server x64\Servers\setup.exe 二、安装步骤 1&#xff0e;双击setup.exe&#xff0c;以…

c++编程(25)——unordered_map模拟实现

欢迎来到博主的专栏&#xff1a;c编程 博主ID&#xff1a;代码小豪 文章目录 unorder_map的底层insert迭代器成员访问函数operatoroperator-\- unordered_map是STL中的关联式容器之一&#xff0c;与常规的map有两点不同 &#xff08;1&#xff09;unordered是无序的意思&#x…

AI与我同创诗:尝试让ai(智谱清言)参与我的诗创活动

ai伴学越久&#xff0c;契合度愈高&#xff0c;“泛滥”之诗情&#xff0c;幸得学伴共雕琢。让ai伴学久了&#xff0c;不知觉的&#xff0c;写诗也让ai帮衬了。此文收录“我共ai”的自创文稿&#xff0c;亦可作“ai诗集”。&#x1f60b; (笔记模板由python脚本于2024年09月03日…

企业微信中嵌套的h5应用调用微信扫码功能

企业微信官方文档 1.登录企业微信后台,管理员可操作,打开应用配置应用可信域名(必须配置,否则无法调用jsapi,可信域名必须有ICP备案且在管理端验证域名归属) 配置部署后的前台域名地址 配置可信域名,部署后的服务器域名(需备案认证) 当域名权限不够时需下载文件效验,将文件放…

网站开发:HTML + CSS - CSS选择器

1. 前言 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种用于控制 HTML 文档样式和布局的语言。它为 Web 页面提供了许多功能&#xff0c;使开发者能够创建美观且功能丰富的用户界面。 提供了丰富的功能来控制网页的外观和布局&#xff0c;增…

掌握SQLAlchemy:Python数据库的魔法师

文章目录 掌握SQLAlchemy&#xff1a;Python数据库的魔法师背景&#xff1a;为什么选择SQLAlchemy&#xff1f;SQLAlchemy是什么&#xff1f;如何安装SQLAlchemy&#xff1f;五个简单的库函数使用方法1. 创建引擎2. 定义模型3. 创建会话4. 添加数据5. 查询数据 场景应用1. 多表…