51nod 2589 快速讨伐
如果不考虑升级操作,只有买装备操作和打怪操作,那么首先一定要先买装备,然后可以打死1级的怪,这些怪被打死的时间只要在第一次买装备后面好了,因为现在总操作是\(n+\sum a_i\)个,所以这里的方案数为\(\binom{n-1+\sum_{i=1}a_i}{a_1}a_1!\).然后考虑买第二个装备,这个操作的位置显然在前面操作放完后的剩下的空位中的第一个,然后就有\(a_2\)个怪要打,方案为\(\binom{n-2+\sum_{i=2}a_2}{a_1}a_2!\),容易发现每考虑完\(i\),就剩下一个怪等级为\(i+1\)到\(n\)子问题,所以这个问题答案就是\(n\)个组合数相乘,具体来说是\(\prod_{i=1}^{n}\binom{n-i+\sum_{j=i}a_j}{a_i}a_i!\)
然后考虑有升级操作,那么买第\(i\)个装备就至少要升\(i\)次级,考虑dp,设\(f_{i,j}\)表示升\(i\)次级以及买\(j\)次装备的方案,显然要满足\(i\ge j\),转移就枚举现在升级还是买装备,如果买装备就要考虑这个等级的怪怎么打,也就是乘上一个类似于上面的组合数,就是从剩下的空位选\(a_j\)个打怪并考虑打怪顺序.答案为\(f_{n,n}\)
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=5000+10,M=N*N,mod=998244353;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
void ad(int &x,int y){x+=y,x-=x>=mod?mod:0;}
int fpow(int a,int b){int an=1;while(b){if(b&1) an=1ll*an*a%mod;a=1ll*a*a%mod,b>>=1;} return an;}
int ginv(int a){return fpow(a,mod-2);}
int n,tt,a[N],s[N],f[N][N];
int fac[M],iac[M];
int C(int a,int b){return b<0||a<b?0:1ll*fac[a]*iac[b]%mod*iac[a-b]%mod;}
int main()
{
n=rd();
tt=n+n;
for(int i=1;i<=n;++i)
{
a[i]=rd();
tt+=a[i],s[i]=s[i-1]+a[i];
}
fac[0]=1;
for(int i=1;i<=tt;++i) fac[i]=1ll*fac[i-1]*i%mod;
iac[tt]=ginv(fac[tt]);
for(int i=tt;i;--i) iac[i-1]=1ll*iac[i]*i%mod;
f[0][0]=1;
for(int i=0;i<=n;++i)
for(int j=0;j<=i;++j)
{
if(!f[i][j]) continue;
ad(f[i+1][j],f[i][j]);
if(j<i) ad(f[i][j+1],1ll*f[i][j]*C(tt-(i-m)-(j+1)-s[j],a[j+1])%mod*fac[a[j+1]]%mod);
}
printf("%d\n",f[n][n]);
return 0;
}
51nod 2589 快速讨伐的更多相关文章
- 【51nod】2589 快速讨伐
51nod 2589 快速讨伐 又是一道倒着推改变世界的题... 从后往前考虑,设\(dp[i][j]\)表示还有\(i\)个1和\(j\)个\(2\)没有填,那么填一个1的话直接转移过来 \(dp[ ...
- 51nod 1013快速幂 + 费马小定理
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013 这是一个等比数列,所以先用求和公式,然后和3^(n+1)有关,有n ...
- 51nod 矩阵快速幂(模板题)
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大 ...
- 51nod 1113 矩阵快速幂
题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...
- 51Nod 1004 n^n的末位数字(日常复习快速幂,莫名的有毒,卡mod值)
1004 n^n的末位数字 题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数N,输出 ...
- 51Nod 1046 A^B Mod C(日常复习快速幂)
1046 A^B Mod C 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = ...
- 51nod 1835 - 完全图 - [dp][组合数公式][快速幂]
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1835 基准时间限制:1 秒 空间限制:131072 KB ...
- 51Nod 快速傅里叶变换题集选刷
打开51Nod全部问题页面,在右边题目分类中找到快速傅里叶变换,然后按分值排序,就是本文的题目顺序. 1.大数乘法问题 这个……板子就算了吧. 2.美妙的序列问题 长度为n的排列,且满足从中间任意位置 ...
- 51nod 1013 3的幂的和 - 快速幂&除法取模
题目地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013 Konwledge Point: 快速幂:https:/ ...
随机推荐
- IDEA下从零开始搭建SpringBoot工程
SpringBoot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之: (1)它是Spring的升级版,Spring容器能做到的事情,它都能做到,而且更简便,从配置形 ...
- bootstrap editable有默认值
function listEditor(data,productCode) { $('#tab1').bootstrapTable('load', data); $('#tab1').bootstra ...
- 数据重塑图解—Pivot, Pivot-Table, Stack and Unstack
Pivot pivot函数用于创建一个新的派生表,该函数有三个参数:index, columns和values.你需要在原始表中指定这三个参数所对定的列名,接下来pivot函数会创建一个新的表格,其中 ...
- JavaScript疑难杂症系列-事件
事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找) 什么是事件 在编程时系统内发生的动作 ...
- snmpEngineBoots & snmpEngineID数据存储到非易失性存储设备
#include <stdio.h> #include <stdlib.h> #include <string.h> int regenerateID() { ; ...
- Adding property to a json object in C#
Adding property to a json object in C# you can do it with a dynamic object dynamic obj = JsonConve ...
- Fragment 的 replace 和 add 方法的区别?
Fragment 本身并没有 replace 和 add 方法,这里的理解应该为使用 FragmentManager 的 replace 和 add 两种方法切换 Fragment 时有什么不同.我们 ...
- 使用Nginx做WebSockets代理教程
WebSocket 协议提供了一种创建支持客户端和服务端实时双向通信Web应用程序的方法.作为HTML5规范的一部分,WebSockets简化了开发Web实时通信程 序的难度.目前主流的浏览器都支持W ...
- 简单的servlet上传文件
boolean multipartContent = ServletFileUpload.isMultipartContent(request);if (multipartContent==true) ...
- 【PI系列】SAP IDOC发送状态03,PI没有收到消息的解决办法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[PI系列]SAP IDOC发送状态03,PI没 ...