首页 > 其他分享 >SP64 PERMUT1 - Permutations 题解

SP64 PERMUT1 - Permutations 题解

时间:2024-04-07 09:12:26浏览次数:16  
标签:limits luogu 题解 sum Permutations long PERMUT1 define 逆序

题目传送门

前置知识

动态规划基础

解法

设 \(f_{i,j}\) 表示 \(1 \sim i\) 的全排列中存在 \(j\) 个逆序对的方案数,状态转移方程为 \(f_{i,j}=\sum\limits_{k=j-\min(i-1,j)}^{j}f_{i-1,k}=\sum\limits_{k=0}^{j}f_{i-1,k}-\sum\limits_{k=0}^{j-\min(i-1,j)-1}f_{i-1,k}\)。

需要前缀和和滚动数组优化。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
ll f[10010],g[2][10010];
int main()
{
    ll n,m,t,i,j,k;
    cin>>t;
    for(k=1;k<=t;k++)
    {
        cin>>n>>m;
        memset(f,0,sizeof(f));
        memset(g,0,sizeof(g));
        f[0]=1;
        for(i=0;i<=m;i++)
        {
            g[1][i]=((i==0)?0:g[1][i-1])+f[i];
        }
        for(i=2;i<=n;i++)
        {
            for(j=0;j<=m;j++)
            {
                f[j]=g[(i-1)&1][j]-((j-min(i-1,j)-1<0)?0ll:g[(i-1)&1][j-min(i-1,j)-1]);
                g[i&1][j]=((j==0)?0:g[i&1][j-1])+f[j];
            }
        }
        cout<<f[m]<<endl;
    }
    return 0;
}

后记

多倍经验:luogu P6323 [COCI2006-2007#4] ZBRKA | luogu P2513 [HAOI2009] 逆序对数列 | luogu P2513 [HAOI2009] 逆序对数列

标签:limits,luogu,题解,sum,Permutations,long,PERMUT1,define,逆序
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18118337

相关文章

  • COCI2011-2012#3 ROBOT 题解
    洛谷题面部分分做法直接依照题意模拟即可。可以获得\(48\)分的好成绩。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;longlongn,m;structnode{ longlongx; longlongy;}point[100005];longlongrobotx=0,roboty=0;longlongquery(){......
  • 不知道什么题的题解
    多组测试数据,问你满足\(lcm\left(x,y\right)=n\)的数对\(\left(x,y\right)\)的数量。由于唯一分解定理,我们不妨令\(x=p_{1}^{a_1}\timesp_{2}^{a_2}\times\cdots\timesp_{i}^{a_i}\),同理,\(y=p_{1}^{b_1}\timesp_{2}^{b_2}\times\cdots\timesp_{i}^......
  • 第33次CSP认证500分题解
    近年来最简单的一次\(CSP\)认证,\(3\)个小时现场满分直接拿下。1、没啥好说的,直接开桶拿下。#include<bits/stdc++.h>usingnamespacestd;#defineN1000010template<classT>inlineTread(T&a){Tx=0,s=1;charc=getchar();while(!isdigi......
  • ABC348F 题解
    一些注意点:一看到这种题就应该往bitset的方向想。如果用bitset,就应该跳脱之前的思维,尝试从最朴素的暴力重新想起。看到这道题,发现直接做非常的不可做的样子,考虑bitset。我们可以先枚举左端点\(l\)。这样,当我们枚举\(j\)时,对于所有的\(k\)使得\(a_{k,j}=a_......
  • 网站使用CDN出现ttf woff等字体跨域问题解决方案
    如果cdn域名+资源路径是可以通过浏览器url地址栏打开的那么一般是因为nginx配置的原因,找到nginx的配置文件添加以下代码:# 允许指定域名访问;location ~ .*.(eot|ttf|ttc|otf|eot|woff|woff2|svg)(.*) { add_header Access-Control-Allow-Origin http(s)://......
  • arch安装教程+部分问题解决
    arch安装教程+部分问题解决网络配置#进入iwctliwctl#获取device名称我这里是wlan0,后面注意wlan0替换成你自己devicedevicelist#扫描附近wifistationwlan0scan#获取所有可连接wifi名字stationwlan0get-networksstationwlan0connect[wifi名]#输入密码......
  • CF1149D Abandoning Roads 题解
    Description一张\(n\)个点\(m\)条边的无向图,只有\(a,b\)两种边权(\(a<b\)),对于每个\(i\),求图中所有的最小生成树中,从\(1\)到\(i\)距离的最小值。\(2\leqn\leq70,n-1\leqm\leq200,1\leqa<b\leq10^7\)。Solution先考虑一个最小生成树是什么样的形态,显然保留边权......
  • P10245 Swimming Pool题解
    P10245SwimmingPool题意给你四条边\(abcd\),求这四条边是否可以组成梯形。思路这显然是一道简单的普通数学题。判断是否能构成梯形只需看四条边是否能满足,上底减下底的绝对值小于两腰之和且大于两腰之差。证明过程如图,\(AB=a\),\(BC=b\),\(CD=c\),\(AD=d\)。过点\(D\)......
  • P10244 String Minimization 题解
    P10244StringMinimization题意给你四个长度为\(n\)的字符串,分别是\(abcd\)。你可以选择一个\(i\)然后交换\(a[i]\)和\(c[i]\),并交换\(b[i]\)和\(d[i]\)。求在\(a\)的字典序尽量小的前提下,\(b\)字典序最小是什么。思路本题并不难。只需要在\(a[i]>c[i]\)......
  • CF1929B Sasha and the Drawing 题解
    CF1929B题意给定一个\(n\timesn\)的正方形,已知正方形最多有\(4\timesn-2\)条对角线,要求要有至少\(k\)条对角线经过至少一块黑色方格,求至少要将几条对角线涂成黑色。分析分类讨论:当\(k<=4\timesn-4\)时,就只需要在上下两侧图就行,所以答案是\([\frac{k}{2}]\)。当......