博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2431 || 洛谷P1521 求逆序对
阅读量:4622 次
发布时间:2019-06-09

本文共 727 字,大约阅读时间需要 2 分钟。

考虑一下插⼊法

n&lt;=100n&lt;=100n<=100
f[i][j]f[i][j]f[i][j]表⽰111~iii的全排列有j个逆序对的⽅案数
f[i][j]=Σf[i−1][j−k](0&lt;=k&lt;=i−1)f[i][j]=Σf[i-1][j-k] (0&lt;=k&lt;=i-1)f[i][j]=Σf[i1][jk](0<=k<=i1)
O(m∗n2)O(m*n^2)O(mn2)

拓展:如果n&lt;=1000n&lt;=1000n<=1000呢?

n&lt;=1000n&lt;=1000n<=1000?

f[i][j]f[i][j]f[i][j]f[i−1]f[i-1]f[i1]中连续⼀段的和
前缀和优化
O(n∗m)O(n*m)O(nm)

下面上非拓展的代码:

#include
using namespace std;int f[105][6005];int main(){ int n,k; scanf("%d%d",&n,&k); f[1][0]=1; f[2][0]=1; f[2][1]=1; f[0][0]=1; for(int i=3;i<=n;i++) { for(int j=0;j<=k;j++) { for(int kk=0;kk<=i-1&&kk<=j;kk++) { f[i][j]+=f[i-1][j-kk]%10000; } } } printf("%d",f[n][k]%10000); return 0;}

转载于:https://www.cnblogs.com/ShineEternal/p/10834335.html

你可能感兴趣的文章
Go语言基础之12--Channel
查看>>
Codeforces Round #446 Div1 E
查看>>
Linux代码的重用与强行卸载Linux驱动
查看>>
Quartz.Net实现定时任务调度
查看>>
Java多线程系列---“JUC原子类”01之 原子类的实现(CAS算法)
查看>>
基于朴素贝叶斯的定位算法
查看>>
排序算法-----总结
查看>>
【前端安全】JavaScript防http劫持与XSS
查看>>
14:调整数组顺序使奇数位于偶数的前面
查看>>
Android 开发工具方法整理
查看>>
windows下配置tomcat的虚拟路径编译器为IDEA
查看>>
Docker 命令导图
查看>>
关于.Net WebAPI数据认证(包括登陆认证、模型认证)
查看>>
吉他消音小技巧
查看>>
升级log4j到log4j2报错:cannot access org.apache.http.annotation.NotThreadSafe
查看>>
ASP工作积累
查看>>
编写可维护的JavaScript----笔记(三)
查看>>
LuoguP2762 太空飞行计划问题(最大权闭合子图,最小割)
查看>>
到底谁霸占了A类的IP地址
查看>>
在Fedora 20 上安装Mysql并初始化root密码
查看>>