首页 > 其他分享 >第 117 场双周赛(容斥原理,记忆化搜索,排序)

第 117 场双周赛(容斥原理,记忆化搜索,排序)

时间:2023-11-12 21:22:55浏览次数:49  
标签:return int res 容斥 双周 117 limit dfs MOD

 本题我们采用隔板法+容斥原理来解决

合格总方案数 = 总方案书 - 不合理的方案数 = 不考虑limit的方案数 - 不合法方案数(至少有一个小朋友 > limit)

任意方案数 n个小球放到3个盒子中 -> n + 2个位置,选两个位置放隔板剩下位置放球 c(n + 2, 2)

三个小朋友为:甲乙丙

小朋友甲(乙丙)>limit 的方案数 c(n - (limit+1) + 2, 2)

小朋友甲乙(甲丙,乙丙)> limit 方案数 c(n - (limit + 1) * 2 + 2, 2)

下朋友甲乙丙三个都 > limit 的方案数 c(n - (limit + 1) * 3 + 2, 2)

def c2(n: int) -> int:
    return n * (n - 1) // 2 if n > 1 else 0

class Solution:
    def distributeCandies(self, n: int, limit: int) -> int:
        return c2(n + 2) - 3 * c2(n - (limit + 1) + 2) + 3 * c2(n - 2 * (limit + 1) + 2) - c2(n - 3 * (limit + 1) + 2)

 

 解法1:dfs

本题可以抽象为一个分组背包问题方案数

n组物品,每组可以选择a - z至少选择1个'l', 1个t,2个e的方案数

MOD = 10 ** 9 + 7

@cache
def dfs(i: int, L: int, t: int, e: int) -> int:
    if i == 0:
        return 1 if L == 0 and t == 0 and e == 0 else 0
    
    res = dfs(i - 1, 0, t, e)
    res += dfs(i - 1, L, 0, e)
    res += dfs(i - 1, L, t, max(0, e - 1))
    res += dfs(i - 1, L, t, e) * 23
    return res % MOD

class Solution:
    def stringCount(self, n: int) -> int:
        return dfs(n, 1, 1, 2)

解法2: 容斥原理

与上一题类似,详细理解 灵神的详细讲解

class Solution:
    def stringCount(self, n: int) -> int:
        MOD = 10 ** 9 + 7
        return (
            pow(26, n, MOD)
           -pow(25, n - 1, MOD) * (75 + n)
           +pow(24, n - 1, MOD) * (72 + n * 2)
           -pow(23, n - 1, MOD) * (23 + n)
        ) % MOD

 

 

 

class Solution {
public:
    long long maxSpending(vector<vector<int>>& values) {
        int n = values.size(), m = values[0].size();
        vector<int> arr(n * m + 1, 0);
        
        int idx = 0;
        for(int i = 0; i < n; i ++ ) {
            for(int j = 0; j < m; j ++ ) {
                arr[idx ++ ] = values[i][j];
            }
        }
        
        sort(arr.begin(), arr.end());
        
        long long res = 0;
        for(int i = 0; i <= idx; i ++ ) {
            res += (long long)i * arr[i];
        }
        
        return res;
        
    }
};

 

标签:return,int,res,容斥,双周,117,limit,dfs,MOD
From: https://www.cnblogs.com/zk6696/p/17827848.html

相关文章

  • KubeSphere 社区双周报 | KubeSphere 3.4.1 发布 | 2023.10.27-11.09
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.10.27-2023.11.09。贡献者名单新晋KubeSphereCon......
  • 第117场双周赛-3min签到题,然后做不了一点
     给你两个正整数 n 和 limit 。请你将 n 颗糖果分给 3 位小朋友,确保没有任何小朋友得到超过 limit 颗糖果,请你返回满足此条件下的 总方案数 。 示例1:输入:n=5,limit=2输出:3解释:总共有3种方法分配5颗糖果,且每位小朋友的糖果数不超过2:(1,2,2),(2......
  • Linux命令(117)之split
    linux命令之split1.split介绍linux命令split是按照指定的大小或行数分割文件。输出文件名为“前缀aa”、“前缀ab”。默认前缀以“x”开头,默认文件大小为1000行2.split用法split[参数]filename[前缀]split参数参数说明-l指定输出文件有多少行-a指定长度的后缀,默认:2-b指定输出文......
  • openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果
    openGauss学习笔记-117openGauss数据库管理-设置数据库审计-查看审计结果117.1前提条件审计功能总开关已开启。需要审计的审计项开关已开启。数据库正常运行,并且对数据库执行了一系列增、删、改、查操作,保证在查询时段内有审计结果产生。数据库各个节点审计日志单独记录。......
  • 牛客练习赛117 C&D
    LinkC分类讨论贪心显然的,正面考虑怎么拼团会很麻烦,所以我们从另一个视角考虑,求出可能的最大团数,然后看一看怎么踢人能够使落单的最少。当K为偶数的时候,显然最大团数就是\((n+m*2)/k\),而当K为奇数的时候,显然男生抱团需要至少一个男生,女生抱团也需要至少一个男生,最大团数就是\(m......
  • 【教3妹学编程-算法题】117. 填充每个节点的下一个右侧节点指针 II
    2哥 :3妹,听说你昨天去面试了,怎么样啊?3妹:嗨,别提了,让我回去等通知,估计是没有通知了,还浪费我请了一天假。2哥 :你又请假了啊,你是怎么跟你那个严厉的老板请假的。3妹:我说我2哥生病了,嘿嘿~2哥:一猜就是说我生病了,自从你找工作,我这一年都病了十几回了……3妹:没办法,假不好请嘛,我尽快......
  • 11月LeetCode每日一题: 117. 填充每个节点的下一个右侧节点指针 II
    题目描述:给定一个二叉树:structNode{intval;Node*left;Node*right;Node*next;}填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为 NULL 。初始状态下,所有 next指针都被设置为 NULL 。 考察......
  • 【蓝桥杯】1024 第 2 场算法双周赛(1~5)
    【蓝桥杯】1024第2场算法双周赛新生【算法赛】-蓝桥云课(lanqiao.cn)#include<iostream>usingnamespacestd;intmain(){printf("15");return0;}铺地板【算法赛】-蓝桥云课(lanqiao.cn)只要面积乘积是\(6\)的倍数即可,特判一下宽和高#include<bits/s......
  • 2023牛客暑期多校训练营8 B Bloodline Counter 指数型生成函数 容斥 多项式求逆
    传送门容易想到求出竞赛图上最大环\(\lek\)的数量,再求出\(\lek-1\)的数量作差即可得到答案。设指数型生成函数\(G(x)\)表示大小为\(i\)的环的方案数。\(G(x)=\sum_{i=1}^k\frac{a_i}{i!}x^i\)那么最大环\(\lek\)的数量\(=[x^n]n!\sum_{i=1}^ki!\frac{(G(x))^i}{i!}\)这里......
  • Databend 开源周报第 117 期
    Databend是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn。What'sOnInDatabend探索Databend本周新进展,遇到更贴近你心意的Databend。特性预览:只读式ATTACHTABLE为了少数几条大规模查询,而......