题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2431

题意:

  给定n,k,问你有多少个由1~n组成的排列,使得逆序对个数恰好为k个。

题解:

  表示状态:

    dp[i][j] = num of sequences

    i:已经用了1~i之间的数(在这一步放了数字i)

    j:逆序对个数为j

  找出答案:

    ans = dp[n][k]

  如何转移:

    在当前这一步要放数字i。

    所以要将i插入一个由1~i-1组成的排列中。

    若将i插入位置x(0 <= x <= i-1),则新添的逆序对个数为x。

    所以:

      dp[i][j] = ∑ dp[i-1][j-x]

    即:

      dp[i][j] = ∑ dp[i-1][j-i+1 to j]

    由于裸dp复杂度为O(N^3) = O(10^9),所以加一个前缀和优化。

  边界条件:

    dp[1][0] = 1

    others = 0

AC Code:

 // state expression:
// dp[i][j] = num of sequences
// i: considered number i
// j: there is j inversion pairs
//
// find the answer:
// ans = dp[n][k]
//
// transferring:
// dp[i][j] = sigma dp[i-1][j-i+1 to j]
//
// boundary:
// dp[1][0] = 1
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005
#define MAX_K 1005
#define MOD 10000 using namespace std; int n,t;
int dp[MAX_N][MAX_K];
int sum[MAX_N][MAX_K]; void read()
{
cin>>n>>t;
} void update_sum(int i,int j,int a)
{
if(j==) sum[i][j]=a;
else sum[i][j]=(sum[i][j-]+a)%MOD;
} int query_sum(int i,int x,int y)
{
if(x==) return sum[i][y];
else return ((sum[i][y]-sum[i][x-])%MOD+MOD)%MOD;
} void solve()
{
memset(dp,,sizeof(dp));
memset(sum,,sizeof(sum));
dp[][]=;
for(int i=;i<=t;i++)
{
sum[][i]=;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=t;j++)
{
dp[i][j]=query_sum(i-,max(,j-i+),j);
update_sum(i,j,dp[i][j]);
}
}
} void print()
{
cout<<dp[n][t]<<endl;
} int main()
{
read();
solve();
print();
}

最新文章

  1. git客服端基本操作
  2. C++中const关键字的使用总结
  3. Hibernate的延迟加载
  4. linux gdb 没有符号表被读取。请使用 &quot;file&quot; 命令。
  5. 【leetcode】13. Roman to Integer
  6. 【转】科普Spark,Spark是什么,如何使用Spark
  7. Webx之表单验证
  8. 求帮看!!!!BZOJ 1014 [JSOI2008]火星人prefix
  9. shell script中的$*和$@
  10. activity的生命周期【转】
  11. 分享:json2.js源代码解读笔记
  12. poj_3461: Oulipo
  13. 学习React系列(五)——使性能最优
  14. OpenCV 1 图像分割--分水岭算法代码
  15. 使用bootstrap-select有时显示“Nothing selected”
  16. 6 个开源的家庭自己主动化工具 | Linux 中国
  17. Ch05 类 - 练习
  18. &lt;操作系统&gt;进程和线程
  19. react中跨域请求天气预报接口数据
  20. VMware虚拟机上配置nginx后,本机无法访问问题

热门文章

  1. Linux_经常使用命令
  2. HDFS源码分析之FSImage文件内容(一)总体格式
  3. 【Mac系统】之Mysql数据库遇到修改数字密码的问题(SQL语法错误:ERROR 1064 (42000),密码策略等问题:ERROR 1819 (HY000))
  4. 【安装.net framework4.0】之安装失败,“安装时发生严重错误”
  5. 嵌入式开发之davinci--- 8127 中osd yuv 数据分析
  6. ftp put get 的使用方法
  7. 在ListView的GroupItem头中显示每列的Summary
  8. 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法
  9. Lumen开发:简单实现auth用户认证
  10. kubernetes高级之集群中使用sysctls