【每日一题】1月29日题目精讲

题号 NC21336
名称 和与或

戳我进入往期每日一题汇总贴~
往期每日一题二期题单

图片说明

如果你在题库做题时遇到了喜欢的题目,欢迎推荐给邓老师~ 点击查看详情
欢迎给每日一题投稿,投稿需要提供牛客题库里的题目+题解 投稿有牛币奖励,可发站内信给王清楚或联系QQ 234186389
每日一题QQ群:659028468

题解

作者:喵渺淼妙的死忠粉
题目描述:你一个数组R,包含N个元素,求有多少满足条件的序列A使得0≤A[i]≤R[i].A[0]+A[1]+...+A[N-1]=A[0] or A[1]... or A[N-1]输出答案对1e9+9取模.
首先知道等式成立的条件是对于每一位分配的A[i],不可能存在2个1,也就是说最多分配一个1.然后就是介绍dp的含义了.
dp需要开两维dp[k][i],第一维是分配到了第k位,第二维是这些A[]前k-1位是不是与R[]相同,然后直接dfs即可.
冷静分析复杂度是60*(1<<10).
代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=11,M=65;
const ll mod=1e9+9;
ll R[N];
int n;
ll dp[M][1<<N];

inline ll dfs(ll s,ll pos)//每个与前面相同情况,现在分配到了第pos位.
{
    ll &ans=dp[pos][s];
    if(pos<=0) return 1;
    if(ans) return ans;
    //先分配0.
    int sp=s;
    for(int i=0;i<n;i++)
    {
        if((s&(1<<i))&&(R[i]&(1ll<<(pos-1))))//假设这一位和R[i]的前pos-1位相同.
        {
            sp^=(1<<i);
        }
    }
    ans=(ans+dfs(sp,pos-1))%mod;
    //分配一个1.
    for(int i=0;i<n;i++)
    {
        if((s&(1<<i)))
        {
            if(!(R[i]&(1ll<<(pos-1)))) continue;
            ans=(ans+dfs(sp^(1ll<<i),pos-1))%mod;
        }
        else ans=(ans+dfs(sp,pos-1))%mod;
    }
    return ans;
}

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lld",&R[i]);
    }
    printf("%lld\n",dfs((1<<n)-1,60ll));
    return 0;
}

欢迎各位大佬来做题写题解,也欢迎大家踊跃在当日讨论贴中提问!

活动奖励:

在牛客博客中写出题解,并回复地址
审核通过可获得(依据题目难度和题解的内容而定)

本道题目2月5日中午12:00之前写的题解有获得牛币资格~

.牛币兑换中心

牛客博客开通方式

  1. 如何开通牛客博客:https://www.nowcoder.com/discuss/202952
  2. 如何使用博客搬家功能:进入博客--->设置--->底部博客搬家
  3. 如果你对牛客博客有任何意见或建议:牛客博客意见反馈专贴
全部评论
https://blog.nowcoder.net/n/56304da26d2046b1a355cabdc5d2b2af
1 回复 分享
发布于 2021-01-29 16:27
https://blog.nowcoder.net/n/0a58fee7a163490492fa4be6efa315a6
点赞 回复 分享
发布于 2021-02-02 18:31
https://blog.nowcoder.net/n/3b8ae3b6504b4717addd1070e49a4367
点赞 回复 分享
发布于 2021-01-29 18:53
https://blog.nowcoder.net/n/492c3dfd472c49a894c6090eeea0a239
点赞 回复 分享
发布于 2021-01-29 11:25
额,硬是没懂。。等明白透了再写
点赞 回复 分享
发布于 2021-01-29 10:07
位运算调了好久 https://blog.nowcoder.net/n/e1543866a0624a039d3fd2c7b7d53456
点赞 回复 分享
发布于 2021-01-28 21:59
https://blog.nowcoder.net/n/9eaf27dd926d4721b3416d85177c9fe7
点赞 回复 分享
发布于 2021-01-28 20:28

相关推荐

6月down后继续尝试~【intro】我是UCL(qs&nbsp;top&nbsp;10)城市空间科学硕士,本科是211机械设计制造及自动化(有工科逻辑底子👩🏻‍💻)过去几年,我的经历有点“跨界”,但核心一直围绕着&nbsp;数据分析&nbsp;+&nbsp;空间信息&nbsp;+&nbsp;可持续发展。📍林火遥感监测的研究(发表Remote&nbsp;Sensing论文);📍在浙大某实验室和关联企业中做过与数字孪生、碳排放评估相关的项目,参与一些算法和技术文件的编写。📍python/GIS研究伦敦超低排放区政策(ULEZ)对空气质量的影响;看起来跨度有些大,我其实一直在寻找同一个方向——用数据与空间技术理解和优化真实世界。(🔎详情CV哦)【认真碎碎念】今年6月后迫于求职环境压力,我申请了部分PhD(ESG、城市交通排放、碳中和方向♻️),期间主要在充实研究能力、读文献📄、和导师🧑‍🏫沟通,也因此有一段“空窗期”,希望遇到【不介意】我处于探索发展路径的伯乐呀(福利:面试官还有机会解锁这位&nbsp;理工+人文混血体&nbsp;的有趣副业经历👾)。【意向岗位/城市】希望寻找一份能结合我背景和「兴趣」的工作。意象方向:🌍&nbsp;GIS&nbsp;/&nbsp;遥感&nbsp;/&nbsp;城市数据分析🏙️&nbsp;智慧城市、可持续发展研究🌱&nbsp;碳中和、环境数据分析、ESG政策研究(感兴趣也正学习ing)💡&nbsp;技术与策略结合的岗位,如数据顾问、其他科技方向的项目助理|解决方案|科研研究助理等等意向地点:上海&nbsp;/&nbsp;深圳&nbsp;/香港(接受Hybrid或部分远程)。希望能加入一个包容多元复合型背景、愿意给年轻人自我学习自我成长机会的团队,不介意我“跨界”的路径,更看重逻辑能力、学习力和独立思考的硬实力和软实力。
你觉得哪一届的校招最难?
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务