博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3664 1~n排列(ai>i ) 为k个数
阅读量:4634 次
发布时间:2019-06-09

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

求1~n的排列个数,使得逆序数(ai>i ) 为给定的k.

dp[i][j]表示前1~i的排列中,有j个数是逆序数的个数.

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define RD(x) scanf("%d",&x)#define RD2(x,y) scanf("%d%d",&x,&y)#define clr0(x) memset(x,0,sizeof(x))typedef long long ll;const int INF=0x3f3f3f3f;const int maxn=100010;const int mod=1000000007;ll dp[1010][1010];int main(){ int i,j,n,k; for(i=1;i<=1000;i++) { dp[i][0]=1; dp[i][i]=0; for(j=1;j
dp[i][j]=(j+1)*dp[i-1][j]+(i-j)*dp[i-1][j-1].

考虑数i的放的位置,显然要想得到j个逆序数,i是大于前面的,所以只用考虑前面逆序数小于等于j的情况,而且放上这位最多只能增加一个逆序数。如果前面有j个逆序数,将这j个数与i交换,逆序数个数不变,第i个还可以放到第i个位置,此时为(j+1)*dp[i-1][j].当前面逆序数为j-1时,此时要构造一个逆序数,可以把前面的非逆序数与i交换,这样就多增加了一个逆序数,此时为(i-1-(j-1))*dp[i-1][j-1].

转载于:https://www.cnblogs.com/zibaohun/p/4046799.html

你可能感兴趣的文章
php 操作分表代码
查看>>
java2
查看>>
复制图片的一部分
查看>>
调试uIP出现死机问题
查看>>
AttributeError: 'dict' object has no attribute 'status_code'
查看>>
poj2135最小费用最大流经典模板题
查看>>
hdu 4355 Party All the Time (2012 Multi-University Training Contest 6 ) 三分搜索
查看>>
POJ 2528 Mayor's posters(线段树)
查看>>
【转】[退役]纪念我的ACM——headacher@XDU
查看>>
利用STl实现队列
查看>>
android中The connection to adb is down,问题和解决 AndroidEclipseAntXML
查看>>
项目需求分析与建议
查看>>
UVa 10112 - Myacm Triangles
查看>>
给同一个按钮添加单双击事件
查看>>
form
查看>>
powershell输出错误信息到文件
查看>>
VS不显示最近打开的项目
查看>>
wcf客户端捕获异常
查看>>
MyEclipse安装Freemarker插件
查看>>
计算多项式的值
查看>>