Add or Multiply 1 题解(第二类斯特林数)
时间:2021-08-23
本文章向大家介绍Add or Multiply 1 题解(第二类斯特林数),主要包括Add or Multiply 1 题解(第二类斯特林数)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接
题目思路
这个题目
首先一个算式肯定是加法和乘法交替的。对于每组连续的加法或者乘法,如果组内的元素是相同的,那么运算的结果也是一样的。假设分成了 \(x\)组加法和\(y\)组乘法,满足 \(|x-y|\leq 1\),那么加法和乘法的分组都是独立的。问题等价于将 \(n\)个有标号的球分到 \(m\) 个有标号的集合里面,使得每个集合都是非空的。这个问题可以用第二类斯特灵数简单解决。
然后直接枚举n分为了\(i\)组,那么m可能分为\(i-1,i,i+1\)组相乘即可
但是对于第\(m\)分为\(i\)组要乘以\(2\)
因为根据隔板法第一组可能为乘法或者加法
代码
#include<bits/stdc++.h>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
#define S dp
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
mt19937 rnd(time(0));
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=3e3+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-10;
int n,m;
ll dp[maxn][maxn];
ll fac[maxn];
signed main(){
for(int i=0;i<=3000;i++){
if(i==0){
fac[i]=1;
}else{
fac[i]=fac[i-1]*i%mod;
}
}
dp[0][0]=1;
for(int i=1;i<=3000;i++){
for(int j=1;j<=i;j++){
dp[i][j]=(dp[i-1][j-1]+j*dp[i-1][j])%mod;
}
}
for(int i=1;i<=3000;i++){
for(int j=1;j<=i;j++){
dp[i][j]=dp[i][j]*fac[j]%mod;
}
}
int _;scanf("%d",&_);
while(_--){
scanf("%d%d",&n,&m);
ll ans=0;
for(int i=1;i<=n;i++){
ll temp=(dp[m][i-1]+2*dp[m][i]+dp[m][i+1])%mod;
ans=(ans+temp*dp[n][i])%mod;
}
printf("%lld\n",ans);
}
return 0;
}
卷也卷不过,躺又躺不平
原文地址:https://www.cnblogs.com/hunxuewangzi/p/15174894.html
- 如何在Weka中加载CSV机器学习数据
- 老司机教你部署Cowrie蜜罐
- 时间序列预测如何变成有监督学习问题?
- 追踪溯源 | 希拉里邮箱泄露事件
- DNS Tunneling及相关实现
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
- 从Trace和Debug来看条件编译(Conditional Compilation)
- 解码针对工业工程领域的网络攻击 Operation Ghoul「食尸鬼行动」
- EndpointAddress——不只是一个Uri[上篇]
- EndpointAddress——不只是一个Uri[下篇]
- ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起
- ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
- ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法