BZOJ 2431 DP
题意:求逆序对数量为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相关推荐
- BZOJ 2423 DP
BZOJ 2423 - DP 第一问是经典DP,直接做就可以了(设\(f[i][j]\)为\(X\)串考虑到\(i\),\(Y\)串考虑到\(j\),且不强制选\(i\)和\(j\)的方案数).然后第 ...
- BZOJ 2431: [HAOI2009]逆序对数列【DP】
2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列aiai,如果有i<ji<j且 ...
- bzoj 2431: [HAOI2009]逆序对数列
2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 2190 Solved: 1262 [Submit][St ...
- bzoj 1084 DP
首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...
- bzoj 2121 DP
首先如果我们能处理出来i,j段能不能消掉,这样就可以直接dp转移了,设w[i]为前i为最少剩下多少,那么w[i]=w[j-1] (flag[j][i]). 现在我们来求flag[i][j],首先我们可 ...
- BZOJ 2431 HAOI2009 在列的数目的顺序相反 递归
标题效果:乞讨1~n有都布置在物种的数目相反的顺序k计划数 订购f[i][j]对于前者i原子的反向排列的数j计划数 因此,我们将第一i插入的数1~i-1该装置 能生产0~i-1反向对 再就是 f[i] ...
- BZOJ 1786 DP
思路: 肯定从小往大填合适了 f[i][j]表示第i个数是j的最少逆序对数 f[i][j]=min(f[i-1][k]+cost,f[i][j]) 优化一下成O(nk)就好啦~ (不优化也可以过的-) ...
- bzoj 2786 DP
我们可以将=左右的两个数看成一个块,块内无顺序要求,把<分隔的看成两个块,那么我们设w[i][j]代表将i个元素分成j个块的方案数,那么显然w[i][j]=w[i-1][j]*j+w[i-1][ ...
- BZOJ刷题记录---提高组难度
BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...
最新文章
- 自动化测试之鼠标悬浮操作、双击、鼠标拖拽
- 百度金融资深产品经理降峰:互金产品如何准确触达用户
- 梓益C语言学习笔记之指针
- python基础(part2)--核心数据类型
- .NET6正式版将近,70%开发者或面临技术断层!
- Linux基础命令(1)
- 当连接一个 IP 不存在的主机时,TCP握手过程是怎样的?
- 自定义调试窗口---上面板
- VMware ubuntu16安装
- python的追加_Python追加添加相同的数据
- python 读取配置文件的单元测试_单元测试
- 通讯录管理系统(C++基础 汇总案例)
- ptc转4-20mA热电阻变送器NI1000 NTC转0-10ma输出PWM
- 实践篇(4):Apache jena SPARQL endpoint及推理
- winMerge配色方案
- EF 通用帮助类 含分页 Lambda 拼接表达式
- Lazada(来赞达):就三个步骤!搞定Lazada店铺装修
- GoLand ide编辑器设置方法注释模板(例如author,date)
- C语言计算三角形的面积
- Docker 从入门到精通
热门文章
- 用openssh下的sftp通过chroot控制用户
- Ngrok让你的本地Web应用暴露在公网上
- java字符串怎么拼接字符串_Java中String使用+ 拼接字符串的原理是什么?
- 蓝桥杯 PREV-37 历届试题 分巧克力
- [swift] LeetCode 104. Maximum Depth of Binary Tree
- L2-008. 最长对称子串-PAT团体程序设计天梯赛GPLT
- 1048. 数字加密(20)-浙大PAT乙级真题
- python数值运算操作符也叫做内置操作符_Python的操作符 - osc_r1gtal48的个人空间 - OSCHINA - 中文开源技术交流社区...
- 批量复制文件并改成有顺序的文件名
- vue+webpack项目调试