E. Natasha, Sasha and the Prefix Sums

给定n个 1 m个 -1的全排

求所有排列的$f(a)=max(0,max_{1≤i≤l}∑_{j=1}^{i}a_{j})$之和

组合数,枚举

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll MOD = 998244853;

int n, m;
ll C[4002][4002];
ll sum;
ll realSum;
ll ans;

void init()
{
    for(int i=0; i<=4000; i++) C[i][0] = C[i][i] = 1;
    for(int i=1; i<=4000; i++)
    {
        for(int j=1; j<i; j++)
        {
            C[i][j] = (C[i-1][j-1] + C[i-1][j])%MOD;
        }
    }
}

int main()
{
    init();
    scanf("%d%d", &n, &m);
    for(int i=n; i>=1 && i>=n-m; i--)///枚举前缀和最大为i时
    {
        sum = (C[n+m][n-i] - realSum + MOD) % MOD;///前缀和最大为i的排列个数
        ans = (ans+(sum * i) % MOD)%MOD;
        realSum = (realSum + sum)%MOD;
    }
    printf("%lld\n", ans);
}

原文地址:https://www.cnblogs.com/liulex/p/11387460.html

时间: 2024-10-30 12:28:57

E. Natasha, Sasha and the Prefix Sums的相关文章

[CF1204E]Natasha,Sasha and the Prefix Sums 题解

前言 本文中的排列指由n个1, m个-1构成的序列中的一种. 题目这么长不吐槽了,但是这确实是一道好题. 题解 DP题话不多说,直接状态/变量/转移. 状态 我们定义f表示"最大prefix sum"之和 变量 f[i][j]为有i个1,j个-1的"最大prefix sum"之和 转移 我们记C[i][j]为\(\left(\begin{matrix} i \\ j\end{matrix}\right)\),那么: \[f[i][j] = \left\{\begin

CF1024E Natasha, Sasha and the Prefix Sums——DP/数学(组合数)

题面 CF1024E 解析 题意就是要求所有由$n$个$1$.$m$个$-1$构成的序列的最大前缀和的和 算法一$(DP)$ $n$, $m$都小于等于$2000$, 显然可以$DP$ 设$dp[i][j]$表示由$i$个$1$, $j$个$-1$构成的序列的最大前缀和的和 $i$个$1$, $j$个$-1$构成的序列, 可以看做是在$i-1$个$1$, $j$个$-1$的序列的最前面加一个$1$得到,也可以看做是在$i$个$1$, $j-1$个$-1$的序列最前面加一个$-1$得到 这也就意味

CodeForces - 1204E Natasha, Sasha and the Prefix Sums (组合数学,卡特兰数扩展)

题意:求n个1,m个-1组成的所有序列中,最大前缀之和. 首先引出这样一个问题:使用n个左括号和m个右括号,组成的合法的括号匹配(每个右括号都有对应的左括号和它匹配)的数目是多少? 1.当n=m时,显然答案为卡特兰数$C_{2n}^{n}-C_{2n}^{n+1}$ 2.当n<m时,无论如何都不合法,答案为0 3.当n>m时,答案为$C_{n+m}^{n}-C_{n+m}^{n+1}$,这是一个推论,证明过程有点抽象,方法是把不合法的方案数等价于从(-2,0)移动到(n+m,n-m)的方案数,

CF1204E Natasha, Sasha and the Prefix Sums

题意 给\(n\)个1和\(m\)个0,定义一个01串的权值为它所有前缀和的最大值(包括0),求可以组成的所有不同串的权值和,答案对998244853取模 思路 由于数据较小,本题有个\(O(n^2)\)比较复杂的DP做法,自行百度... 实际上本题用数学规律可以\(O(n)\)做 设\(f_i\)表示权值为\(i\)的01串数量,直接求不容易,再设\(g_i\)为权值至少为\(i\)的01串数量,那么\(f_i=g_i-g_{i+1}\) 利用求卡特兰数列的一种方法:将01串看做从坐标系\((

Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学

Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学 [Problem Description] ? 给你\(n\)个\(1\),\(m\)个\(-1\),他们任意排列有\(\frac{(n+m)!}{n!\cdot m!}\)中排列,每种排列都有一个最大前缀和(可能为\(0\)),求所有排列的最大前缀和之和为多少. [Solution] ? 定义\(dp[i][j]\)表示有\(i\)个\(

CodeForces 837F - Prefix Sums | Educational Codeforces Round 26

按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforces Round 26 题意: 设定数组 y = f(x) 使得 y[i] = sum(x[j]) (0 <= j < i) 求初始数组 A0 经过多少次 f(x) 后 会有一个元素 大于 k 分析: 考虑 A0 = {1, 0, 0, 0} A1 = {1, 1, 1, 1} -> {C(

GenomicRangeQuery /codility/ preFix sums

首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which correspond to the types of successive nucleotides in the sequence. Each nucleotide has an impact factor, which is an integer. Nucleotides of types A,

codeforces:Prefix Sums

题目大意: 给出一个函数P,P接受一个数组A作为参数,并返回一个新的数组B,且B.length = A.length + 1,B[i] = SUM(A[0], ..., A[i]).有一个无穷数组序列A[0], A[1], ... 满足A[i]=P(A[i-1]),其中i为任意自然数.对于输入k和A[0],求一个最小的下标t,使得A[t]中包含不小于k的数值. 其中A[0].length <= 2e5, k <= 1e18,且A[0]中至少有两个正整数. 数学向的题目.本来以为是个找规律的题目

CF1303G Sum of Prefix Sums

原题链接 这题好毒瘤啊! 首先看到是树上查询全局某式子的最大值,珂以想到这题无外乎是链分治(\(\text{dsu on tree}\))或点分治.作为一个专业的链分治选手, 窝在比赛中想了\(30\)min也不会.比赛后想了想,好像\(\text{dsu on tree}\)不星(珂能还是窝太菜了). 点分治.因为是全局最大值,所以珂以不用在分治里容斥. 假设当前的子树的根是\(\text{u}\). 由于不用容斥,所以要确保在分治里面路径不能有重复边,这个珂以枚举\(\text{u}\)的儿