题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1250

看了半天...

把第一问想成逆序对的话似乎很容易想了,新加入一个数,可以往前挪动,增加的逆序对数就是它后面那些数的个数;

所以 f[i][j] = ∑(k = max( 0 , j - i + 1)) f[i-1][k],用前缀和即可;

第二问正好用第一类斯特林数;

第一类斯特林数 str[i][j] 表示把 i 个数分成 j 个环,环有顺序的方案数,str[i][j] = str[i-1][j-1] (自成一环) + ( i - 1 ) * str[i-1][j] (跟到某个后面)

对应到这道题,原来每个数自己是一个环,表示它就在自己的位置上;

一个有顺序的环,按一个顺序往过数,一个数到下一个数相互交换,就对应了一种交换;

str[i][j] 中,i - j 个数与别的环合并,也就是发生了一次交换,所以答案就是 ∑(n - k <= i <= n ) str[n][i]

注意不要 MLE ...

用滚动数组求斯特林数得注意一点,初值 str[0][0] 不要赋成1,然后后面 i == j 时也求出来即可,感性理解一下的话~

这题...好像也不难啊。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const maxn=,mod=;
int n,m;
ll f[][maxn],s[][maxn],str[][maxn],ans1,ans2;
void init()
{
// for(int i=0;i<=1;i++)str[i][i]=1;
str[][]=;//滚动数组!让初始化符合意义
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)//因为滚动所以 str[i][i]也在这里求
{
int p=(i&),q=!p;
str[p][j]=(str[q][j-]+(i-)*str[q][j]%mod)%mod;
}
}
int main()
{
scanf("%d%d",&n,&m);
init();
for(int i=;i<=;i++)
{
f[i][]=,s[i][]=;
for(int j=;j<=m;j++)s[i][j]+=s[i][j-];
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
int p=(i&),q=!p;
if(j-i+<=)f[p][j]=s[q][j];
else f[p][j]=(s[q][j]-s[q][j-i]+mod)%mod;
if(j)s[p][j]=(s[p][j-]+f[p][j])%mod;
else s[p][j]=f[p][j];
}
int tmp=m;
while(tmp>=)ans1=(ans1+f[n&][tmp])%mod,tmp-=;
for(int i=n-m;i<=n;i++)ans2=(ans2+str[n&][i])%mod;
printf("%lld %lld\n",ans1,ans2);
return ;
}

最新文章

  1. kibana 搜索提示挡住输入框
  2. C#注意事项及错误处理
  3. 丢失全部控制文件,noresetlogs重建控制文件,alter database open
  4. thinkphp操作数据库
  5. JVM -XX: 参数介绍(转)
  6. x86, x86-64, i386, IA32, IA64...
  7. 【Android】数据存储-SharedPreferences存储
  8. 如何使用Jquery获取Form表单中被选中的radio值
  9. IOS 原生解析JSON 问题
  10. Asp.net异步IHttpAsyncHandler示例
  11. text-overflow: ellipsis;省略号颜色设置
  12. IOS三种归档(NSKeyArchieve)的总结
  13. Java二维数组的概念和使用方法
  14. webpack学习笔记一:安装webpack、webpack-dev-server、内存加载js和html文件、loader处理非js文件
  15. .Net File类的操作
  16. 8位、16位、32位单片机中的“XX位”指什么?
  17. javaweb防止表单重复提交
  18. [MySQL FAQ]系列 — processlist中哪些状态要引起关注 解决mysql cpu过高问题
  19. Qt_MainWindow简介
  20. [Android系列—] 2. Android 项目文件夹结构与用户界面的创建

热门文章

  1. 小程序wx:key = “{{*this}}”报错
  2. P1269 信号放大器
  3. 网络模型、IP命令、SS命令介绍
  4. VS C#报错CS1056意外的字符&quot;(Unexpected Character&quot;)
  5. python实现定时发送qq消息
  6. 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
  7. PAT 1145 Hashing - Average Search Time
  8. [K/3Cloud] K/3 Cloud1.0怎样和2.0共存在一台服务器上
  9. java查询MySQL时,MySQL中tinyint长度为1时转换为boolean
  10. Win32编程API 基础篇 -- 3.消息处理 根据英文教程翻译