bzoj2431: [HAOI2009]逆序对数列(DP)
Posted Sakits
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj2431: [HAOI2009]逆序对数列(DP)相关的知识,希望对你有一定的参考价值。
一眼题...f[i][j]前i个数有j个逆序对的数量
f[i][j]=sigma(f[i-1][j-k]){1<=k<=i}
维护一个前缀和即可
#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> #define ll long long using namespace std; const int maxn=1010,mod=1e4; int n,k; int f[maxn][maxn],sum[maxn]; void read(int &k) { int f=1;k=0;char c=getchar(); while(c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar(); while(c<=‘9‘&&c>=‘0‘)k=k*10+c-‘0‘,c=getchar(); k*=f; } inline int MOD(int x){return x>=mod?x-mod:x;} int main() { read(n);read(k); f[0][0]=1; for(int i=1;i<=n;i++) for(int j=0;j<=min(i*(i-1)>>1,k);j++) { sum[j]=MOD((j?sum[j-1]:0)+f[i-1][j]); f[i][j]=MOD(sum[j]-sum[j-i]+mod); } printf("%d\n",f[n][k]); return 0; }
以上是关于bzoj2431: [HAOI2009]逆序对数列(DP)的主要内容,如果未能解决你的问题,请参考以下文章
bzoj2431: [HAOI2009]逆序对数列(前缀和优化dp)