51NOD 1020 逆序排列
来源:互联网 发布:mac上音频剪辑软件 编辑:程序博客网 时间:2024/04/28 22:42
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1020
题解
注意到数列中最大的数放下去以后,它所能产生的逆序对数是确定的。
那么我们依次从大到小放,每次产生的逆序对数x,有
然后我们令
接下来是陷进了奇怪的地方。。
那么有
那么接下来我们可以通过对右边的式子部分和优化,复杂度是
然而,这是多组数据,会跪。。。。
然而更糟糕的是,我们的求和项里存在
这里有个处理的方法,就是
其中,我们令
所以,这就是一个比较无言的误区。
并不知道这个怎么转换成另一个方程式
如果你一开始设的是剩下还有
那么可以直接想到
呵呵。。。。
接着,你可以用部分和优化,或者比较漂亮的做法是:
存疑的问题是:
这两个求的内容是离奇相等的,求证。。。
code
#include <algorithm>#include <bitset>#include <cassert>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <deque>#include <iostream>#include <map>#include <queue>#include <set>#include <string>#include <vector>using namespace std;typedef long long LL;const int mod = 1000000007;struct modn { int n; modn() { } modn(LL x) { n = (x >= 0 ? x%mod : (x%mod+mod)%mod); } modn& operator -() { n = mod-n; return *this; } void print() const { printf("%d\n", n); }};bool operator ==(const modn& A, const modn& B) { return A.n == B.n; }bool operator !=(const modn& A, const modn& B) { return A.n != B.n; }modn operator +(const modn& A, const modn& B) { return A.n + B.n; }modn operator -(const modn& A, const modn& B) { return A.n - B.n; }modn operator *(const modn& A, const modn& B) { return (LL)A.n * B.n; }modn operator +=(modn& A, const modn& B) { return A = A + B; }modn operator -=(modn& A, const modn& B) { return A = A - B; }modn operator *=(modn& A, const modn& B) { return A = A * B; }const int maxn = 1010;const int maxk = 20010;modn f[maxn][maxk];void pre() { f[0][0] = 1; for (int i = 1; i < maxn; ++ i) { modn s = 0; for (int j = 0; j < maxk; ++ j) f[i][j] = (j >= 1 ? f[i][j-1] : 0) + f[i-1][j] - (j >= i ? f[i-1][j-i] : 0); }}int n, k;void solve() { scanf("%d%d", &n, &k); f[n][k].print();}int main() { pre(); int kase; scanf("%d", &kase); while (kase --) solve();// for(;;); return 0;}
0 0
- 51NOD 1020 逆序排列
- 51nod-1020 逆序排列
- 51nod 1020 逆序排列
- 51nod 1020 逆序排列
- 51Nod 1020 逆序排列
- 51Nod 1020 逆序排列
- 51nod 1020 逆序排列
- 51nod 1020:逆序排列 DP
- 51nod 1020 逆序排列(dp+离线)
- 51nod 1020 逆序排列(dp)
- 51nod 1020 逆序排列【DP】
- 51nod 1020 逆序排列 (DP_好题)
- 【反序表+DP】51Nod 1020 逆序排列
- 51 nod 1020 逆序排列(递推+DP)
- 51nod 1020 逆序排列【Dp+思维递推优化】好题!好题!好题!
- 51Nod-1020-逆序排序
- 51Nod 逆序数
- 51nod逆序数
- Java基础学习总结(20)——基础语法
- Linux下安装mongodb
- 防苹果小米日期时间控件
- java j2ee 面试题目
- Java基础学习总结(21)——数组
- 51NOD 1020 逆序排列
- Eclipse 下 更改字符集
- Java基础学习总结(22)——异常处理
- MySQL实现类似Oracle中start with功能
- Linux 下用yum安装mysql
- 谷歌chrome浏览器如何设置默认以隐身模式启动
- Java基础学习总结(23)——GUI编程
- eclipse 中运行代码 出现:editor does not contain a main type
- linux+jenkins+tomcat+git 安装过程的的一些小问题