zoukankan      html  css  js  c++  java
  • [2019杭电多校第七场][hdu6656]Kejin Player

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656

    题意为从i级花费a元有p的概率升到i+1级,有1-p的概率降到x级(x<i),查询从L级升到R级的花费期望。

    菜鸡才知道期望是有可加性的QAQ,即1-5的期望==1-2的期望+2-5的期望。

    如果明确这一点就可以比较轻松的推出转移方程.....阿勒?

    感觉和我往常见得有点不一样啊QAQ。

    按照以往的思路,我会设dp[i]为i到n的期望,则转移方程为$dp[i]=p*dp[i+1]+(1-p)*dp[x[i]]+a[i]$

    然后....就没有然后了,只能暴力跑高斯消元了。

    可是按照以往的套路来说,不是会有很棒的化简方式使得式子可以直接退出来吗。

    所以去巨佬们的博客学习一番后回来搞了搞。

    大致的思路是这样的,先设f[i]表示从第i级到第i+1级的期望,dp[i]表示从第1级到第i级的期望,对于f[i] ,有p的概率交钱直接变成i+1,有(1-p)的概率回到x级,那么回到x级后想要升级到i+1,需要dp[i]-dp[x]升回到i级,再+f[i]到i+1级,则转移方程为$f[i]=p*a[i]+(1-p)*(dp[i]-dp[x[i]]+f[i]+a[i])$

    涨姿势了QAQ

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<algorithm>
     6 using namespace std;
     7 typedef long long ll;
     8 const int maxn = 5e5 + 10;
     9 const ll mod = 1e9 + 7;
    10 const ll qpow(ll a, ll b) {
    11     ll ans = 1;
    12     while (b) {
    13         if (b & 1)
    14             ans = a * ans%mod;
    15         a = a * a%mod;
    16         b /= 2;
    17     }
    18     return ans;
    19 }
    20 ll r[maxn], s[maxn], x[maxn], a[maxn], dp[maxn];
    21 int main() {
    22     int t;
    23     scanf("%d", &t);
    24     while (t--) {
    25         int n, q;
    26         scanf("%d%d", &n, &q);
    27         for (int i = 1; i <= n; i++)
    28             scanf("%lld%lld%lld%lld", &r[i], &s[i], &x[i], &a[i]);
    29         for (int i = 1; i <= n; i++) {
    30             ll p = r[i] * qpow(s[i], mod - 2) % mod;
    31             ll pp = qpow(p, mod - 2) % mod;
    32             ll f = (a[i] + (1 + mod - p) % mod*(dp[i] + mod - dp[x[i]]) % mod) % mod*pp%mod;
    33             dp[i + 1] = (dp[i] + f) % mod;
    34         }
    35         while (q--) {
    36             int l, r;
    37             scanf("%d%d", &l, &r);
    38             printf("%lld
    ", (dp[r] - dp[l] + mod) % mod);
    39         }
    40     }
    41 }
  • 相关阅读:
    写一点应用关于 Lucene.Net,snowball的重新组装(三)
    写一点应用关于 Lucene.Net,snowball的重新组装(二)
    C++ stirng,int 互转(转载)
    特征词选择算法对文本分类准确率的影响(二)
    webGL简单例子(klayge)
    QT 信号和槽
    windows资源管理(内核对象/GDI对象/user对象)
    memcpy memmove区别和实现
    演示软件SpringHome制作
    在浏览器中加载googleEarth插件
  • 原文地址:https://www.cnblogs.com/sainsist/p/11396501.html
Copyright © 2011-2022 走看看