题意:求逆序对数量为k的长度为n的排列的个数

SOL:

  显然我们可以对最后一位数字进行讨论,判断其已经产生多少逆序对数量,然后对于前n-1位同样考虑---->每一个长度的排列我们都可以看做是相同的,因为它与最后一位的影响我们已经计算过了.那么就变成了一个好多维DP的过程...

  不过我的方程感觉有点太直白,应该可以优化因为在BZ上都是卡时过去的...太慢了...大概状态还是有问题....

Code:  

/*=================================================================
# Created time: 2016-03-30 19:36
# Filename: 2431.cpp
# Description:
=================================================================*/
#define me AcrossTheSky
#include <cstdio>
#include <cmath>
#include <ctime>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #include <set>
#include <map>
#include <stack>
#include <queue>
#include <vector> #define lowbit(x) (x)&(-x)
#define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++)
#define FORP(i,a,b) for(int i=(a);i<=(b);i++)
#define FORM(i,a,b) for(int i=(a);i>=(b);i--)
#define ls(a,b) (((a)+(b)) << 1)
#define rs(a,b) (((a)+(b)) >> 1)
#define getlc(a) ch[(a)][0]
#define getrc(a) ch[(a)][1] #define mod 10000
#define maxn 1100
#define maxk 1010
#define maxm 100000
#define pi 3.1415926535898
#define _e 2.718281828459
#define INF 1070000000
using namespace std;
typedef long long ll;
typedef unsigned long long ull; template<class T> inline
void read(T& num) { bool start=false,neg=false; char c; num=0; while((c=getchar())!=EOF) { if(c=='-') start=neg=true; else if(c>='0' && c<='9') { start=true; num=num*10+c-'0'; } else if(start) break; } if(neg) num=-num;
}
/*==================split line==================*/
int f[maxn][maxk];
int main(){ int n,k;read(n); read(k);memset(f,0,sizeof(f));f[1][0]=1;FORP(i,1,n)FORP(j,1,i) {int t=i-j;FORP(l,0,k-t)f[i][l+t]+=f[i-1][l],f[i][l+t]%=mod;}printf("%d\n",f[n][k]);
}

转载于:https://www.cnblogs.com/YCuangWhen/p/5343395.html

BZOJ 2431 DP相关推荐

  1. BZOJ 2423 DP

    BZOJ 2423 - DP 第一问是经典DP,直接做就可以了(设\(f[i][j]\)为\(X\)串考虑到\(i\),\(Y\)串考虑到\(j\),且不强制选\(i\)和\(j\)的方案数).然后第 ...

  2. BZOJ 2431: [HAOI2009]逆序对数列【DP】

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列aiai,如果有i<ji<j且 ...

  3. bzoj 2431: [HAOI2009]逆序对数列

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2190  Solved: 1262 [Submit][St ...

  4. bzoj 1084 DP

    首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...

  5. bzoj 2121 DP

    首先如果我们能处理出来i,j段能不能消掉,这样就可以直接dp转移了,设w[i]为前i为最少剩下多少,那么w[i]=w[j-1] (flag[j][i]). 现在我们来求flag[i][j],首先我们可 ...

  6. BZOJ 2431 HAOI2009 在列的数目的顺序相反 递归

    标题效果:乞讨1~n有都布置在物种的数目相反的顺序k计划数 订购f[i][j]对于前者i原子的反向排列的数j计划数 因此,我们将第一i插入的数1~i-1该装置 能生产0~i-1反向对 再就是 f[i] ...

  7. BZOJ 1786 DP

    思路: 肯定从小往大填合适了 f[i][j]表示第i个数是j的最少逆序对数 f[i][j]=min(f[i-1][k]+cost,f[i][j]) 优化一下成O(nk)就好啦~ (不优化也可以过的-) ...

  8. bzoj 2786 DP

    我们可以将=左右的两个数看成一个块,块内无顺序要求,把<分隔的看成两个块,那么我们设w[i][j]代表将i个元素分成j个块的方案数,那么显然w[i][j]=w[i-1][j]*j+w[i-1][ ...

  9. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

最新文章

  1. 自动化测试之鼠标悬浮操作、双击、鼠标拖拽
  2. 百度金融资深产品经理降峰:互金产品如何准确触达用户
  3. 梓益C语言学习笔记之指针
  4. python基础(part2)--核心数据类型
  5. .NET6正式版将近,70%开发者或面临技术断层!
  6. Linux基础命令(1)
  7. 当连接一个 IP 不存在的主机时,TCP握手过程是怎样的?
  8. 自定义调试窗口---上面板
  9. VMware ubuntu16安装
  10. python的追加_Python追加添加相同的数据
  11. python 读取配置文件的单元测试_单元测试
  12. 通讯录管理系统(C++基础 汇总案例)
  13. ptc转4-20mA热电阻变送器NI1000 NTC转0-10ma输出PWM
  14. 实践篇(4):Apache jena SPARQL endpoint及推理
  15. winMerge配色方案
  16. EF 通用帮助类 含分页 Lambda 拼接表达式
  17. Lazada(来赞达):就三个步骤!搞定Lazada店铺装修
  18. GoLand ide编辑器设置方法注释模板(例如author,date)
  19. C语言计算三角形的面积
  20. Docker 从入门到精通

热门文章

  1. 用openssh下的sftp通过chroot控制用户
  2. Ngrok让你的本地Web应用暴露在公网上
  3. java字符串怎么拼接字符串_Java中String使用+ 拼接字符串的原理是什么?
  4. 蓝桥杯 PREV-37 历届试题 分巧克力
  5. [swift] LeetCode 104. Maximum Depth of Binary Tree
  6. L2-008. 最长对称子串-PAT团体程序设计天梯赛GPLT
  7. 1048. 数字加密(20)-浙大PAT乙级真题
  8. python数值运算操作符也叫做内置操作符_Python的操作符 - osc_r1gtal48的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 批量复制文件并改成有顺序的文件名
  10. vue+webpack项目调试