博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces1097D Makoto and a Blackboard 数学+期望dp
阅读量:5216 次
发布时间:2019-06-14

本文共 1603 字,大约阅读时间需要 5 分钟。

题目大意:

  给出一个n和k,每次操作可以把n等概率的变成自己的某一个因数,(6可以变成1,2,3,6,并且概率相等),问经过k次操作后,期望是多少?

思路:数学和期望dp  好题好题!!

  直接考虑n到因子很难做,所以要研究从n到因子的一些性质。

  如果一个数可以写成,p^c这样的形式,并且p是质数,那么如果把这个数进行上述的操作,他可以变成的形式必然是p^x(0<=x<=c),并且每个数的概率是平均的。

  所以对于这样的数,我们可以得出dp方程,i表示第几次操作,j表示p^j。

  dp[ i + 1 ][ j ] = dp[ i ][ x ] / (  j + 1 );( j <= x );

  但是不是每个数都能写成p^c的形式的,但是每个数都能写成  p1^c1  *  p2 ^c2  ……*pn ^ cn 的形式,所以我们就把一个数拆开,对每一个部分单独算期望,最后相乘,就是原来的期望了。

  好题好题!!

#include
const int inf=0x3f3f3f3f;using namespace std;typedef long long ll;const ll p=1e9+7;const int maxn=110;ll inv[maxn];ll dp[10010][60];ll c[maxn],m[maxn];int len;ll n,k;void getinv() { inv[1]=1; for(int i=2; i<=60; i++) { inv[i]=(p-p/i)*inv[p%i]%p; }}int main() { cin>>n>>k; getinv(); ll temp=n; for(ll i=2; i*i<=temp; i++) { if(temp%i==0) { c[++len]=i; while(temp%i==0) { temp/=i; m[len]++; } } } if(temp!=1) c[++len]=temp,m[len]=1; ll ans=1; for(int tep=1; tep<=len; tep++) { memset(dp,0,sizeof(dp)); dp[0][m[tep]]=1; for(int i=1; i<=k; i++) { for(int j=0; j<=m[tep]; j++) { for(int t=j; t<=m[tep]; t++) { dp[i][j] = (dp[i][j]+dp[i-1][t]*inv[t+1]%p)%p; } } } ll tmp=0; ll di=1; for(int j=0; j<=m[tep]; j++) { tmp+=di*dp[k][j]%p; tmp%=p; di*=c[tep]; di%=p; } ans=(ans*tmp)%p; } cout<
<

 

转载于:https://www.cnblogs.com/mountaink/p/10292280.html

你可能感兴趣的文章
对于 yii2 高级模板 生成文件入口
查看>>
C语言math.h库函数中atan与atan2的区别
查看>>
Bresenham算法
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
Java使用FileReader(file)、readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号。...
查看>>
Elipse安装Spring Tool Suite
查看>>
Android Studio3.0 Error:Execution failed for task ':app:javaPreCompileDebug' 错误
查看>>
Tiles入门和Tiles 框架和体系结构
查看>>
入门必看--JavaScript基础
查看>>
MyBatis入门
查看>>
URL地址下载图片到本地
查看>>
ATM作业
查看>>
基于mini2440的uboot移植(一)
查看>>
redis maxmemory设置
查看>>
mysql 密码过期问题 password_expired
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
使用swagger作为restful api的doc文档生成
查看>>