首页 > 其他分享 >数拆分

数拆分

时间:2024-08-17 15:49:17浏览次数:7  
标签:return int 要么 拆分 正整数 mod

模拟赛的一道题目:"ppip看到了一个各元素均为正整数、长度为k、各元素之和为n的不降数列。他想要知道这种数列的个数,对998244853取模。"

事实证明,我的写法是:先垫一层 \(1\),再用拆解为正整数的做法去求答案。虽然过了,但感觉自己都不知道自己在干什么。

正解代码:

#include<bits/stdc++.h>
using namespace std;
const int mod = 998244853;
int f[2][100010],n,k,ans;
inline int add(int x,int y){ return x + y >= mod ? x + y - mod : x + y; }
inline void toadd(int &x,int y){ x = add(x,y); }
int main(){
	scanf("%d%d",&n,&k);
	if(n < k)return puts("0"),0;
	else if(n == k)return puts("1"),0;
	 
	f[0][0] = 1;
	for(int i = 1;i<=k;++i){
		int now = (i&1),pre = (now^1);
		for(int j = 0;j<=n;++j)f[now][j] = 0;
		for(int j = i;j<=n;++j){
			toadd(f[now][j],f[pre][j-1]);
			toadd(f[now][j],f[now][j-i]);
		}
	}
	printf("%d",f[k&1][n]);
	return 0;
}

下面是数拆分的几种类型。

自然数:

f[0]=1;
// f[i][j] = f[i][j-1] + f[i-1][j-i]
// 留下第 2 维
for(int i=1;i<=k;i++)
	for(int j=i;j<=n;j++)
		f[j]=(f[j]+f[j-i])%mod;
printf("%lld\n",f[n]);

理解:
前 \(i\) 个位置选出总和为 \(j\) 的方案数,完全背包。

正整数:

// f[i][j] 表示选择了 i 个,总和为 j
f[0][0] = 1
for(int i=1;i<=k;i++)
	for(int j=i;j<=n;j++)
		f[i][j]=f[i-1][j-1]+f[i][j-i];

理解:每次要么多选一个 \(1\),要么每个数都 \(+1\)。

不重复:

g[0][0]=1;
for(int i=1;i<=n;i++)
	for(int j=i;j<=n;j++)
		g[i][j]=g[i-1][j-i]+g[i][j-i];

理解:必须选 \(i\),每次要么多放一个 \(i\),要么每个数都加上 \(i\)。
有些感性。相对于每次的增量为 \(1\) 而言,每次增量为 \(i\) 可以保证每个增量都会出现

标签:return,int,要么,拆分,正整数,mod
From: https://www.cnblogs.com/fight-for-humanity/p/18364509

相关文章

  • Embedding 之大规模数据拆分
    Embedding之大规模数据拆分受限于常见LLM的上下文大小,例如gpt3.5t是16k、gpt4t是128k,我们并不能把完整的数据整个塞到对话的上下文中。即使数据源接近于LLM的上下文窗口大小,llm在读取数据时很容易出现分神,或者忽略其中部分细节的问题。因此,我们需要对数据进行......
  • 亿级大表垂直拆分:上云业务的工程实践
    亿级大表垂直拆分:上云业务的工程实践原创修改于 2023-10-1410:59:096810举报文章被收录于专栏:后台技术汇1、前言伴随着不断扩张的业务量,在数据库层面一般会经历数据拆分。解决问题的第一步,就是重新评估DB表结构设计的合理性。2、大表问题......
  • 按照第一列拆分excel为单独文件
    按照第一列拆分excel为单独文件创建时间:2024-08-09一、使用方法1.1修改config.json文件里面的地址{"excelPATH":"E:\\downloads\\无标题(2).xls"}修改为后面文件的具体位置1.2双击运行程序二、使用实例2.1数据准备2.2按照商品名称拆分将商品名称复制到第......
  • python-docx 将文档根据标题二拆分为多个docx文件
    python-docx将文档根据标题二拆分为多个docx文件时隔好久,又开始搞文档了感觉搞来搞去还不如手动复制粘贴得了……只是文本内容–>简单文本内容自定义样式保持不变(有点难度)提取文档中的图片、表格(简单)按照顺序还原图片、表格到文档中,并且不改变样式(累了,毁灭吧)题注、......
  • 洛谷P2404 自然数的拆分问题——题解
    洛谷P2404题解传送锚点摸鱼环节自然数的拆分问题题目描述任何一个大于\(1\)的自然数\(n\),总可以拆分成若干个小于\(n\)的自然数之和。现在给你一个自然数\(n\),要求你求出\(n\)的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列......
  • python拆分PDF文件
    先占个空,后面在慢慢更新下面这个代码实现讲一个PDF文件拆分成多个文件importPyPDF2defsplit_pdf(input_pdf_path,output_prefix,start_page,end_page):"""分割PDF文件为多个小的PDF文件,每个文件包含原始文档的一部分页面。:paraminput_pdf_path:输入......
  • go开发要不要拆分独立的包
    在Go语言中,业务开发时是否使用独立的Go包(package)主要取决于项目的结构和需求。以下是使用独立Go包的一些区别和考虑因素:1. 模块化:独立的Go包有助于将代码分割成更小的、可管理的模块。这有助于提高代码的可读性和可维护性。2. 重用性:通过将功能封装在独立的包中,你可以......
  • 在oracle中将一行字符串拆分成多行
    例如,有如下一张表,表名为bk_test。插入了以下数据:CREATETABLEBK_TESK(idvarchar2(10),svarchar2(20));insertintoBK_TESKvalues('A','1,2,3');insertintoBK_TESKvalues('B','4,5,6');insertintoBK_TESKvalues('C','......
  • c++ 从txt读取数据 按照特殊字符拆分 gnss
      CMakeLists.txtcmake_minimum_required(VERSION3.10)project(ReadTextFile)#设置C++标准为C++11set(CMAKE_CXX_STANDARD11)set(CMAKE_CXX_STANDARD_REQUIREDTrue)#添加可执行文件,并链接主程序文件和自定义类的头文件add_executable(mainmain.cpp)......
  • 代码随想录训练第三十三天|LeetCode322. 零钱兑换、LeetCode279.完全平方数、LeetCode
    文章目录322.零钱兑换思路279.完全平方数思路139.单词拆分思路多重背包背包总结遍历顺序01背包完全背包总结322.零钱兑换给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果......