今天ATP学姐来讲课啦。
在记录讲课内容及题解前先看道以前做过的DP
[HAOI2009]逆序对数列
题目描述
对于一个数列{ai},如果有i
输入输出格式
输入格式:
第一行为两个整数n,k。
输出格式:
写入一个整数,表示符合条件的数列个数,由于这个数可能很大,你只需输出该数对10000求余数后的结果。
输入输出样例
输入样例#1:
1 | 4 1 |
输出样例#1:
1 | 3 |
说明
样例说明:
下列3个数列逆序对数都为1;分别是1 2 4 3 ;1 3 2 4 ;2 1 3 4;
测试数据范围
30%的数据 n<=12
100%的数据 n<=1000,k<=1000
题解
现在已经不难想到状态 , 设
表示前i个数产生j个逆序对数的方案数。
由于下一个数一定更大,所以转移就是:
这个式子还是有点问题的,因为当前加的这个数最多产生i对逆序对数,因此加的时候要减掉(j-i)的逆序对数的方案。
也就是这样
程序实现这个递推有点技巧,下面是Code
1 | // luogu-judger-enable-o2 |
接下来是几道矩阵快速幂的递推题
HDU 2604
•题目大意:给定一个数字L,求有多少个长度为L且仅有字母m和f的字符串满足串中不出现子串fmf和fff。答案对一个数字M取模
•多组数据,L不超过10^6
其实HDU原题是2^l….
突然发现HDU TM说的就是L…
1 |
|