博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1020 逆序排列 | dp
阅读量:5211 次
发布时间:2019-06-14

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

在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。

由于逆序排列的数量非常大,因此只需计算并输出该数 Mod 10^9 + 7的结果就可以了。

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)第2 - T + 1行:每行2个数n,k。中间用空格分隔。(2 <= n <= 1000, 0 <= k <= 20000)

肯定是dp啦 我们考虑1~i的一个排列,一定是由1~i-1的排列在某个位置加一个i得到,所以dp[i][j]=∑dp[i-1][j-k],同理dp[i][j-1]=∑dp[o-1][j-1-k], 两个式子相减然后移项得到 dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-i] 初始化dp[i][0]=1;
1 #include
2 #include
3 #include
4 #define P 1000000007 5 #define N 1010 6 #define K 20010 7 typedef long long ll; 8 using namespace std; 9 int f[N][K],n,k,t;10 void init()11 {12 for (int i=1;i
=i)19 f[i][j]=(f[i][j]-f[i-1][j-i]+P)%P;20 }21 }22 int main()23 {24 scanf("%d",&t);25 init();26 while (t--)27 {28 scanf("%d%d",&n,&k);29 printf("%d\n",f[n][k]);30 }31 return 0;32 }

 

 

转载于:https://www.cnblogs.com/mrsheep/p/7861063.html

你可能感兴趣的文章
Flexslider - 响应式的 jQuery 内容滚动插件
查看>>
赞!15个来自 CodePen 的酷炫 CSS 动画效果
查看>>
new_blog 纪念。
查看>>
【面试】【转】测试基础知识---黑盒测试白盒测试
查看>>
Ubuntu、Debian安装Docker CE
查看>>
ionic 集锦
查看>>
JS格式化时间
查看>>
算法练习(一:排序算法)
查看>>
安装nodejs
查看>>
MFC基于对话框风格按钮控件添加图片的方法(大神止步)
查看>>
python内存机制与垃圾回收、调优手段
查看>>
WayOs 帐号到期自动清理工具,致浪费在清理到期用户的青春
查看>>
小程序页面传值e.currentTarget
查看>>
Qt 4.7:QML Examples and Demos(转)
查看>>
SSH 配置详解
查看>>
Google Maps Premier Master Concept
查看>>
EF之POCO应用系列3——延迟加载
查看>>
Net Core环境开发与调试
查看>>
UITextField 文本字段控件 -- IOS (解决键盘遮住View及密文設定的问题)(实例)(转)...
查看>>
Redis计算地理位置距离-GeoHash
查看>>