【洛谷P2513】逆序对数列

前缀和、滚动数组优化dp

f[i][j]表示前i个数,逆序对数为j的方案数

我们知道,在第k个位置放第i个数,单步得到的逆序对数为i-k

则在前i个数,最多能产生的逆序对数为i个,最少0个,均可转移到j

所以我们得到:f[i][j]=sum(f[i-1][j...j-i])

所以我们可以通过前缀和优化j

滚动数组消去 i 的一维

这样时间复杂度由n^2k变为nk,空间由nk变为k

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=1010,p=10000;
 5 int n,k,f[N],sum[N];
 6 int main(){
 7     scanf("%d %d",&n,&k);
 8     f[0]=1;
 9     for (int i=1;i<=n;i++){
10         sum[0]=f[0];
11         for (int j=1;j<=k;j++)
12             sum[j]=(sum[j-1]+f[j])%p;
13         for (int j=k;j>=1;j--){
14             f[j]=(f[j]+sum[j-1])%p;
15             if (j>=i)
16                 f[j]=(f[j]-sum[j-i]+p)%p;
17         }
18     }
19     printf("%d",f[k]%p);
20     return 0;
21 } 
View Code

 

转载于:https://www.cnblogs.com/Absolute-Zero/p/6064268.html

内容概要:本文档详细介绍了Android高级控件的使用方法及其应用场景。首先讲解了下拉列表Spinner,包括其两种表现形式(下拉列表形式和对话框形式),并介绍了适配器Adapter的基础概念及其三种主要类型:数组适配器ArrayAdapter、简单适配器SimpleAdapter和基本适配器BaseAdapter,重点阐述了它们各自的特点和使用步骤。接着,文档对列表视图ListView进行了深入探讨,涉及分隔线样式、按压背景等属性的设置方式。随后,描述了网格视图GridView,详细解释了其拉伸模式的效果及取值。对于翻页视图ViewPager,不仅介绍了基本概念,还展示了翻页标签栏PagerTabStrip的具体应用,特别是用于创建启动引导页。最后,文档介绍了碎片Fragment的概念,强调了其在大屏设备上的优势,以及与ViewPager结合使用的实战案例——记账本应用。 适合人群:有一定Android开发基础,希望深入了解并掌握高级控件使用的开发者。 使用场景及目标:①掌握下拉列表、列表视图、网格视图、翻页视图等高级控件的实现细节;②理解适配器的作用及其不同类型的使用场景;③学会使用Fragment优化应用界面布局,提高用户体验;④通过具体案例(如记账本),将所学控件应用于实际开发中。 阅读建议:本文档内容详实,涵盖多种高级控件的理论知识与实践技巧。建议读者在学习过程中结合官方文档或相关资料进行对比研究,同时动手实践,以便更好地理解和掌握这些控件的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值