zoukankan      html  css  js  c++  java
  • 【洛谷4996】咕咕咕

    题面

    小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙。

    比如,时间回溯到了 2018 年 11 月 3 日。小 F 望着自己的任务清单:

    1. 看 iG 夺冠;
    2. 补月赛题的锅。

    小 F 虽然经常咕咕咕,但他完成任务也是很厉害的,他一次性可以完成剩余任务的任一非空子集。比如,他现在可以选择以下几种中的一种:

    1. 看 iG 夺冠;
    2. 补月赛题的锅;
    3. 一边看 iG 夺冠的直播,一边补锅。

    当然,比赛实在是太精彩了,所以小 F 就去看比赛了。

    不过,当金雨从天而降、IG 举起奖杯之时,小 F 突然心生愧疚——锅还没补呢!于是,小 F 的内心产生了一点歉意。

    这时小 F 注意到,自己总是在某些情况下会产生歉意。每当他要检查自己的任务表来决定下一项任务的时候,如果当前他干了某些事情,但是没干另一些事情,那么他就会产生一定量的歉意——比如,无论他今天看没看比赛,只要没有补完月赛的锅,他都会在选择任务的时候产生 1 点歉意。小 F 完成所有任务后,他这一天的歉意值等于他每次选择任务时的歉意之和。

    过高的歉意值让小 F 感到不安。现在,小 F 告诉你他还有 n项任务,并告诉你在 m 种情况中的一种 statei 的情况下,小 F 会产生 ai 点歉意。请你帮忙计算一下,小 F 在那一天所有可能的完成所有任务方式的歉意值之和是多少。

    由于答案可能很大,你只需要输出答案对 998244353 取模即可。

    分析

    其实比赛的时候就想到了,和取什么关系不大,因为是计算和,所以只需要将每种情况的价值*出现次数就可以了

    关键就是计算这个出现次数。看见这么小的数据规模就一门心思以为是状压所以...咕咕咕了

    好吧不要找借口,n<=3的时候你的出现次数也没推对啊

    我们可以发现一个序列出现次数和0和1的位置无关,只和数量有关。就按计算1来说,令f[i]表示有i个1的方案数(其实f[i]同时也是有i个0的方案数,因为转移是相同的)

    那么假设在最后一次填数,要填满i个1的时候,可以选j个填。那么这j个可以在i个位置上任意放置,在乘上放置前的方案数

    可以得到f[i]=∑f[i-j]*C(i,j)

    那么对一个情况的贡献就是 w[s]*f[0的个数]*f[1的个数]

    为什么呢?选0的个数的方案和选1的个数的方案是分步而不是分类,所以根据乘法原理,s这个状态出现的方案数应该是两者相乘。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define N 30
    #define mod 998244353
    #define ll long long
    ll n,m,w,s0,s1,ans;
    ll f[N],c[N][N];
    char s[N];
    int main()
    {
        scanf("%lld%lld",&n,&m);
        f[0]=1;c[0][0]=1;
        for(ll i=1;i<=20;i++)
        {
            c[i][0]=1;
            for(ll j=1;j<=i;j++)
                c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
        }
        for(ll i=1;i<=20;i++)
            for(ll j=1;j<=i;j++)
                f[i]=(f[i]+c[i][j]*f[i-j]%mod)%mod;
        for(ll i=1;i<=m;i++)
        {
            scanf("%s%lld",s,&w);s1=0,s0=0;
            for(ll j=0;j<n;j++)s0+=(s[j]=='0'),s1+=(s[j]=='1');
            ans=(ans+(f[s0]*f[s1])%mod*w)%mod;
        }
        printf("%lld
    ",ans);
        return 0;
    } 
  • 相关阅读:
    一篇文章高效定位iframe
    URL与视图函数的映射
    include标签—引用文件路径
    UnitTest单元测试框架解析【实用篇】
    【案例演练】测试器与模板继承
    2招带你快速获取响应头与发送头
    dede网站如何更新地图sitemap.html
    申请微信小程序流程步骤
    phpstudy本地配置--dede织梦网
    stylus样式开发的使用----vue
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9905485.html
Copyright © 2011-2022 走看看