练习杂谈2
hihocoder练习
这道题我第一反应就动态规划,但是确实有段时间没有碰dp了,有点生疏
#include<iostream>
using namespace std;
#define max 1000000009
int n, l;
long long shuzu[1005][2002];
void print(){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= l;j ++){
cout << shuzu[i][j] << " ";
}
cout << endl;
}
}
int main(){
cin >> n >> l;
for(int i = 2; i <= l; i++) shuzu[2][i] = 2;
// print();
long long temp;
for(int i = 3; i <=n; i++){
temp = shuzu[i-1][i-1] * (i-1);
shuzu[i][i] = shuzu[i-1][i-1] * i % max;
for(int j = i+1; j <= l; j++){
shuzu[i][j] = i * (temp + shuzu[i-1][j-1]) % max;
temp = (i - 1) * (temp + shuzu[i-1][j-1]) % max;
}
}
// print();
cout << shuzu[n][l] << endl;
return 0;
}
牛客网出题人的女装
这道题我开始还以为只是只是用哈gcd
的题,然后就不停的WA,后头看题解才晓得这道题居然用了贝叶斯定理
,这个定理好像概率学过,但是完全记不到了,我概率也学得撇当时只是应付考试,很多东西都没有仔细研究过,这次好生补了一哈
贝叶斯定理文章推荐:
夜深人静写算法之朴素贝叶斯算法
贝叶斯推断及其互联网应用
其实问题就出在我很自然的就把从两个箱子中取出女装的概率都定为1/2,开始还坚信自己是对的,其实是不一样的,这就是概率学得撇后果,这是第二次概率让我刮目相看,以前一直觉得概率没啥用,我又不当赌神,又不买彩票。。。,上一次概率问题是生日悖论(随机找23个人,其中任意两个人生日相同的概率为50%),其实之所以从这两个中取东西的概率不同,就是因为两个箱子中的女装比例造成的。
取模注意
牛客网出题人的手环
这道题思路是对了,树状数组+离散化·,但是还是错了,就是因为取模的时候居然出现了负数,我还想过应该是不会出现负数的,其实在这n种情况中所有的你逆序数都是不可能为0的,这是正确的,但是为啥子就是出现了负数喃?因为每次都是取模!取模过后之前一个很大的逆序数有可能就变得很小,然后再减去一个之前减不会为负得数就可能出现负数,所以以后取模的时候如果有减法,一定要加一个取模的数