[2018雅礼省选集训3-31]Max 期望DP

11人阅读 评论(0) 收藏 举报
分类:

注意到m比较小,不妨状压m
我们设fi,j,S表示Ai用掉集合S中的操作后值为j的概率。
再设gi,j,S表示A1..i用掉集合S中的操作后最大值为j的概率,枚举Ai使用的操作集合转移即可。
复杂度O(nc2m23m)
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define up(x,y) (x=(x+(y))%mod)
#define in(x,s) ((s>>(x-1))&1)
#define ll long long
using namespace std;
const int mod=1000000007;
int n,m,c,pc[1030];
ll P[41][11][4],f[41][31][1030],g[41][31][1030],ans;
int main()
{
    scanf("%d%d%d",&n,&m,&c);
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            for(int k=0;k<=c;k++)
                scanf("%lld",&P[j][i][k]);
    for(int s=0;s<(1<<m);s++)
        for(int t=s;t;t>>=1) pc[s]+=(t&1);
    for(int i=1;i<=n;i++)
    {
        f[i][0][0]=1;
        for(int j=1;j<=m;j++)
            for(int s=0;s<(1<<(j-1));s++)
                for(int k=0;k<=c*(j-1);k++)
                    if(f[i][k][s])
                    for(int l=0;l<=c;l++)
                        up(f[i][k+l][s|(1<<(j-1))],f[i][k][s]*P[i][j][l]);
    }
    g[0][0][0]=1;
    for(int i=1;i<=n;i++)
        for(int s=0;s<(1<<m);s++)
            for(int j=0;j<=pc[s]*c;j++)
                if(g[i-1][j][s])
                    for(int u=((1<<m)-1)^s,t=u;;t=(t-1)&u)
                    {
                        for(int k=0;k<=pc[u]*c;k++)
                            up(g[i][max(j,k)][s+t],g[i-1][j][s]*f[i][k][t]);
                        if(!t) break;
                    }
    for(int i=0;i<=c*m;i++)
        up(ans,g[n][i][(1<<m)-1]*i%mod);                    
    printf("%lld",ans);

    return 0;
}
查看评论

雅礼集训1.4 序列

标签:迭代加深搜索,IDA* 题目 序列(sequence) 【题目描述】 给定一个1~n的排列x,每次你可以将x1~xi翻转。你需要求出将序列变为升序的最小操作次数。有多组数据。 【输入数...
  • qwerty1125
  • qwerty1125
  • 2018年01月05日 17:43
  • 113

[2018雅礼集训1-12]小C的线段树 DP

题面 考虑当n>mn>m时答案为00,1≤nm≤1051\le nm \le 10^5,所以只用考虑n1052n的情况。 把一个区间看成一对括号,设fi,l,rf_{i,l,r}表示前ii个点,之...
  • DOFYPXY
  • DOFYPXY
  • 2018年01月17日 22:14
  • 158

[2018雅礼集训1-10]Function 积性函数前缀和

题面 题目要我们求 ∑i=1n∑d|iμ(d)∗σ20(id)\sum_{i=1}^n\sum_{d|i}\mu(d)*\sigma_0^2(\frac{i}{d}) 设f(i)=∑d|iμ(d...
  • DOFYPXY
  • DOFYPXY
  • 2018年01月11日 22:18
  • 162

雅礼集训酱油记(2017-01-11~2017-01-23)

一句话:知道了自己有多弱。。。讲课: 第一天就完全懵逼了,毛爷爷的DP除了学过的听懂了一半,没学过的东西(Knuth、单调性、三分、凸包??)单词都认不到。。。酱油过去。 数据结构还算听懂得比较多...
  • can919
  • can919
  • 2017年01月24日 21:59
  • 509

[2018雅礼集训1-12]小C饮水记

题面 考场上sb用set,式子还没化成O(T)O(T)的,总复杂度O(nTlogn+nT2)O(nT\log n+nT^2),70分滚粗。。。 首先对于一段长度为kk区间,假设按w1,...,wk...
  • DOFYPXY
  • DOFYPXY
  • 2018年01月12日 21:04
  • 193

[2018雅礼集训1-16]序列 爆搜+贪心

题面 首先问题转化为选取一个(Mi,Vi)(M_i,V_i)的集合,该集合必须满足若Mk|lcm{Mi}M_k|lcm\{M_i\},(Mk,Vk)(M_k,V_k)必须在集合中,最大化∑Vi\su...
  • DOFYPXY
  • DOFYPXY
  • 2018年01月18日 20:51
  • 99

雅礼集训暴力大神hxx

标签:树形DP,前缀和 题目 暴力大神hxx 题目描述 最近连续几场考试,hxx作为暴力组大神,连续用暴力A了几道神题,令某些写正解的大神很不爽。但是当大神们去询问hxx暴力的方法...
  • qwerty1125
  • qwerty1125
  • 2018年01月06日 17:26
  • 146

[2018雅礼集训1-8]送你一堆区间 线段树优化DP

题面 其实做着题有点受海明距离那题启发,状态都设计的差不多。 给关键点离散化后,把每个区间重新定位,并把左端点按从小到大排序。设fi,jf_{i,j}表示只考虑前ii个区间,前jj个关键点都覆盖到...
  • DOFYPXY
  • DOFYPXY
  • 2018年01月08日 22:27
  • 253

[ 分治 决策单调性优化DP ] LOJ#6039. 「雅礼集训 2017 Day5」珠宝

设 fi,jfi,jf_{i,j} 表示售价 ≤i≤i\le i 的珠宝,使用 jjj 万元的最大吸引力。转移方程很容易写出。 因为售价相同的珠宝肯定是从最大吸引力开始取的,所以转移的函数是上凸的。...
  • gjghfd
  • gjghfd
  • 2018年03月14日 09:46
  • 78
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 2396
    排名: 1万+
    最新评论