记录学习过程,递归解决
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
王神想要知道n的所有排列的逆序对数和,但是他觉得太水了,于是让你算。
输入格式
一行一个整数n
输出格式
一行即答案,对1007取模
样例输入
2
样例输出
1
数据规模和约定
1<=n<=10
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int mat1[11] = {0}, mat2[11] = {0};
int n;
int compute_inverse()
{
int cnt2 = 0;
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
if(mat2[i] > mat2[j])
cnt2++;
}
}
return cnt2;
}
int demo(int idx)
{
int cnt0;
if(idx == n+1)
{
cnt0 = compute_inverse();
return cnt0;
}
int cnt1 = 0;
for(int i=1; i<=n; i++)
{
if(mat1[i])
continue;
mat1[i] = 1;
mat2[idx] = i;
cnt1 += demo(idx+1);
mat1[i] = 0;
}
return cnt1;
}
int main()
{
int cnt;
cin>>n;
cnt = demo(1);
cout<<cnt%1007;
}