codeforces1097D Makoto and a Blackboard 数学+期望dp

题目传送门

题目大意:

  给出一个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<bits/stdc++.h>
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<<ans<<endl;
}

原文地址:https://www.cnblogs.com/mountaink/p/10292280.html

时间: 2024-10-08 01:16:46

codeforces1097D Makoto and a Blackboard 数学+期望dp的相关文章

数学期望dp

期望dp 数学期望: \(E(X) = \sum {p_ix_i}\) 数学期望是线性函数,满足\(E(aX + By) = a * E(X) + b * E(Y)\) 接下来看两道毒瘤题 绿豆蛙的归宿 对于每个点,它的期望值 = 当前路径长度 / 起点的出度 所以我们先求出每个点的出度--无非就是在加入每条边的时候统计一下 根据数学期望的定义和性质, \[F[x]=\frac{1}{k} \sum_{i = 1}^{k} (F[y_i ]+ z_i)\] 显然我们需要用逆推法,也就需要建反图,

小Y的涂鸦 数学期望 dp

题意概述: 现在给出一个N*N的方格纸,有M个格子已经被涂黑了.现在小明也来涂格子,每次等概率地涂格子(包括已经被涂过的),问期望的涂格子次数,使得方格纸每一行每一列都至少有一个格子被涂过. 数据范围: 1 ≤ n ≤ 2·103,0 ≤ m ≤ min(n2, 2·103),1 ≤ ri, ci ≤ n  (这是给出的涂过的格子的坐标), Time limit : 1 s,Memory limit : 512 mb 分析: 我开始有一点小小的认为我的脑子可能有点好使了(YY出一个自己认为掌握的

ZOJ3329-One Person Game(概率DP求数学期望)

One Person Game Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge There is a very simple and interesting one-person game. You have 3 dice, namelyDie1, Die2 and Die3. Die1 hasK1 faces. Die2 has K2 faces.Die3 has K3 faces. All the dic

[题解]数学期望_luogu_P1850_换教室

数学期望dp,题面第一次见很吓人,然而从CCF语翻译成人话就简单多了, 开始一般会想到用 f [ i ] [ j ]表示前 i 个课程申请 j 次的期望,然而其实会发现转移的时候还和上一次的情况有关(有某概率取上一次某种情况) 所以用 f [ i ] [ j ] [ 0/1 ]记录这次申请与否,然后枚举每种情况用概率乘一下即可 #include<iostream> #include<cstdio> #include<cstring> #include<algori

[2013山东ACM]省赛 The number of steps (可能DP,数学期望)

The number of steps nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; padding-right:0px; color:rgb(83,113,197); text-decoration:none; padding-top:0px"> Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 Mary

CSU 1290 DP解决数学期望问题

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1290 题目大意: 给定k个数,每次可以生成0-N-1中的任何一个数,k个数中出现不同的整数的个数的数学期望 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 #define N 1005 5 double dp[N]; 6 int main() 7 { 8 int T,k,n; 9 scan

[2013山东ACM省赛] The number of steps (概率DP,数学期望)

The number of steps Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Mary stands in a strange maze, the maze looks like a triangle(the first layer have one room,the second layer have two rooms,the third layer have three rooms -). Now she st

POJ3682King Arthur&#39;s Birthday Celebration(数学期望||概率DP)

King Arthur is an narcissist who intends to spare no coins to celebrate his coming K-th birthday. The luxurious celebration will start on his birthday and King Arthur decides to let fate tell when to stop it. Every day he will toss a coin which has p

poj3682:数学期望,O(1)做法附推导过程

这几天一直在磨蹭这题..第一个答案很容易,但在第二个答案我无法算出来了,于是只好求助于Zayin.Zayin又求助于我们年级里面的一个研究生数学老师..而现在终于算出来了,我看了看,自己也推出来几次了,先看题:) King Arthur's Birthday Celebration Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2921 Accepted: 926 Description King Arthur is an