好题总结汇总

news2024/10/5 17:27:01

好题总结汇总

总结一些做完很有收获的题。


一、经典问题 + DP的结合

1、题意:

给定 n n n 种颜色的球的数量 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an,选出一些不同种类的球(也就是在n种球中选球的任意情况),将球两两组合并且这两个球不能一致,或者将1个球看成一组,找到选出来的这些球的最小组数,球所有情况的最小组合数之和。

2、总结:

(1) 先对 a a a 数组进行排序。

(2) 假如我们已经选到了 n n n 个球的数量 a 1 , a 2 , . . . , a n , a 1 ≤ a 2 ≤ . . . ≤ a n a_1, a_2, ..., a_n, a_1 \le a_2 \le ... \le a_n a1,a2,...,an,a1a2...an 按照k个不同小球组合在一起或者是1个个组合的最小组合数是多少?
结论是:
r e s u l t = m a x ( a [ n ] , c e i l ( ∑ a [ i ] / k ) ) result = max(a[n], ceil(\sum{a[i]} / k)) result=max(a[n],ceil(a[i]/k))

(3) 当我们有个这个结论,我们就可以直接进行背包 d p dp dp 了,定义 d p dp dp 数组为: d p [ i ] [ j ] dp[i][j] dp[i][j],表示前i个物品中必选 a [ i ] a[i] a[i], a [ i ] a[i] a[i] 为最大值,且体积为 j j j 的方案数。
转移方程为: d p [ 0 ] [ 0 ] = 1 , d p [ i ] [ j ] = ∑ d p [ 1.... i − 1 ] [ j ] dp[0][0] = 1, dp[i][j] = \sum{dp[1....i-1][j]} dp[0][0]=1,dp[i][j]=dp[1....i1][j],复杂度 O ( n 2 ) O(n^2) O(n2)

(4) 求取答案, A n s = ∑ d p [ i ] [ j ] ∗ m a x ( a [ i ] , c e i l ( j / k ) ) Ans = \sum{dp[i][j] * max(a[i], ceil(j / k))} Ans=dp[i][j]max(a[i],ceil(j/k))

3、代码:
#include <bits/stdc++.h> 
#define int long long 
using namespace std; 
const int N = 5010 + 10; 
const int mod = 998244353; 
int n, m; 
int a[N];
int dp[N][N]; 
void solve() {
    cin >> n; 
    for(int i = 1; i <= n; ++ i ) cin >> a[i]; 
    sort(a + 1, a + 1 + n); 
    
    dp[0][0] = 1; 
    
    int su[N] {0};
    su[0]=1;
    dp[0][0]=1;
    for(int i = 1; i <= n; ++ i ) {
        for(int j = a[i]; j <= 5000; ++ j ) { 
            dp[i][j] += su[j-a[i]];
            // su[j] = (dp[i][j] + su[j]) % mod; 
        }
        for(int j = 0; j <= 5000; ++ j ) 
            su[j] = (su[j] + dp[i][j]) % mod;
    }
    // cout<<dp[1][1]<<endl;
    int ans = 0; 
    for(int i = 1; i <= n; ++ i ) 
        for(int j = 0; j <= 5000; ++ j ) {
            ans = (ans + dp[i][j] * max((int)ceil(j * 1.0 / 2), a[i]) % mod) % mod;
            // cout<<dp[i][j]<<' '<<max((int)ceil(j * 1.0 / 2), a[i])<<endl;
        }
    cout<<ans<<endl;
}
signed main() {
    int ts = 1;  
    // cin >> ts; 
    while(ts -- ) solve(); 
    
    return 0; 
}

二、数学公式推导

1、题意:

在这里插入图片描述

2、题解:

非常妙的一道题,直接开始推导:
假设我们划分 a a a 个’L’形, b b b 个2*2连通块。
我们可以得到一个方程组:
T T T 是一个未知的非负整数,满足 a ∗ 3 + b ∗ 4 = T a * 3 + b * 4 = T a3+b4=T
b = ( T − 3 ∗ a ) / 4 b=(T{-}3*a)/4 b=(T3a)/4
f ( a , b ) = f ( a , ( T − 3 ∗ a ) / 4 ) = a ∗ x + b ∗ y = a ∗ x + ( T − 3 ∗ a ) / 4 ∗ y = ( x − 3 ∗ y / 4 ) ∗ a + T ∗ y / 4 f(a, b) = f(a,(T{-}3*a)/4) = a * x + b * y = a * x + (T{-}3*a)/4*y = (x-3*y/4)*a+T*y/4 f(a,b)=f(a,(T3a)/4)=ax+by=ax+(T3a)/4y=(x3y/4)a+Ty/4
我们发现就是一个有关a的一次函数,我们分类讨论根据单调性求即可。

3、代码:
#include<bits/stdc++.h>
#define int long long 
using namespace std; 
const int N = 1e5 + 10; 

int n,x,y;
signed main() {
    cin>>n>>x>>y;
    if(n==2){
        cout<<max(x,y)<<endl;
        return 0; 
    }
    if(x * 4 == 3 * y) {
        cout<<y*n*n/4<<endl;
        return 0; 
    } 
    
    if(x * 4 <= 3 * y) {
        cout<<n*n/4*y<<endl;
    }
    else {
        int ans=n*n/3*x;
        if(n*n%3) {
            ans-=(x-max(x,y));
        }
        cout<<ans<<endl;
    }
    
    return 0; 
}

三、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

把项目打包成Maven Archetype(多模块项目脚手架)

1、示例项目 2、在pom.xml中添加archetype插件 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.2.0</version> </plugin>3、打包排除某些目录 当我们使用…

上海AI Lab开源首个可替代GPT-4V的多模态大模型

与开源和闭源模型相比&#xff0c;InternVL 1.5 在 OCR、多模态、数学和多轮对话等 18 个基准测试中的 8 个中取得了最先进的结果。 上海AI Lab 推出的 InternVL 1.5 是一款开源的多模态大语言模型 (MLLM)&#xff0c;旨在弥合开源模型和专有商业模型在多模态理解方面的能力差距…

智慧公厕打造智慧城市新标杆

公共厕所作为城市基础设施的重要组成部分&#xff0c;直接关系到市民的生活品质和城市形象。传统的公厕管理方式存在着许多问题&#xff0c;如环境脏乱、清洁不及时等&#xff0c;给市民带来了诸多不便和不满。而智慧公厕作为一种全新的管理模式&#xff0c;通过物联网、大数据…

CSS-浮动

float (浮动) 作用&#xff1a;盒子的顶点是一样的&#xff0c;具备行内块的特征&#xff0c;能设置宽高 属性&#xff1a;float 属性值&#xff1a;left 浮动在网页左边 right 浮动在网页右边 .a{width: 100px;height: 100px;float:left;background-color: red;}.b…

AI算法-高数2-导数定义和公式

P14 2.1 导数的定义(一):2.1 导数的定义_哔哩哔哩_bilibili 导数定义&#xff1a; 导数公式&#xff1a; P15 2.1 导数的定义(二)&#xff1a;2.1 导数的定义&#xff08;二&#xff09;_哔哩哔哩_bilibili [a,b]可导&#xff0c;a的端点&#xff1a;右可导&#xff0c;b端点&…

[ 视频号]代替用户发布视频api

使用接口&#xff0c;替代用户使用设备直接发布视频api 接口地址&#xff1a; http://接口地址/api/v2 先调用登录接口&#xff0c;进行账号登录 登录二维码接口入参&#xff1a; {"appId": "","proxyIp": "","regionId"…

企业网站管理系统(多语言)源码搭建/部署/上线/运营/售后/更新

一款基于FastAdminThinkPHPUniapp开发的企业网站管理系统插件。支持自定义多语言、自定义模型与字段、自定义表单等功能。 功能特性 多语言功能&#xff08;默认中英文&#xff0c;后台可新增语言&#xff0c;并支持管理前台语言包&#xff09;有道api翻译功能响应式布局&…

安全加固

目录 1.文件锁定管理 2.设置用户账户有效期 3.查看并清除命令历史记录 4.设置用户超时登出时间 5.用户切换 6.用户提权 7.禁用重启热键CtrlAltDel 8.设置单用户模式密码 9.调整BIOS引导设置 10.禁止root用户从本地登录&#xff1a; 11.禁止root用户通过ss…

Linux系统编程--初识Linux

目录 一、相关概念 1、Unix系统 2、操作系统 操作系统的分类&#xff1a; 流行的操作系统&#xff1a; 3、Ubuntu系统及特点 二、Ubuntu安装 三、Linux目录 /根目录 路径分类&#xff1a; 四、shell指令 1、命令行提示符&#xff1a; 2、指令 2.1命令基本的操作&…

Meta FAIR: 深层网络不合理的低效性

这篇文章的标题"The Unreasonable Ineffectiveness of the Deeper Layers"巧妙地呼应了著名物理学家尤金维格纳在1960年发表的一篇论文"数学在自然科学中不合理的有效性"(The Unreasonable Effectiveness of Mathematics in the Natural Sciences)。维格纳…

ubuntu22.04服务器docker-compose方式部署ldap服务

一&#xff1a;系统版本 二&#xff1a;部署环境 节点名称 IP 部署组件及版本 配置文件路径 机器CPU 机器内存 机器存储 Ldap 10.10.10.111 self-service-password:latest phpldapadmin:latest openldap:latest openldap:/data/openldap/config phpldapadmin&#x…

梅兰日兰NSJ400N断路器NSJ400N可议价

梅兰日兰 NSJ400N 3 极 400 安培 600 伏交流电 紧凑型断路器 制造商的原始标签 脱扣单元&#xff1a;LS 功能 –&#xff08;长时间和短时间&#xff09; 负载侧凸耳 中断额定值&#xff1a;65kA 240 Vac 35kA 480 伏交流电压 18kA 600 伏交流电压 &#xff08;外观可能与照…

01、vue+openlayers6实现自定义测量功能(提供源码)

首先先封装一些openlayers的工具函数&#xff0c;如下所示&#xff1a; import VectorSource from ol/source/Vector; import VectorLayer from ol/layer/Vector; import Style from ol/style/Style; import Fill from ol/style/Fill; import Stroke from ol/style/Stroke; im…

【SpringBoot整合系列】SpringBoot整合RabbitMQ-消息过期(死信队列和延迟队列)

目录 业务场景传统轮询消息队列完整版 默认情况TTL&#xff08;消息的有效期&#xff09;TTL 的设置有两种不同的方式单条消息过期队列消息过期特殊情况 死信队列概述应用场景产生原因原理图死信交换机死信队列实现一下 延迟队列背景定时任务&#xff1f;延迟队列实现思路代码 …

Spring @Repository 注解

Spring 的项目严重依赖注解。 Repository 注解 在Spring2.0之前的版本中&#xff0c;Repository注解可以标记在任何的类上&#xff0c;用来表明该类是用来执行与数据库相关的操作(即dao对象)&#xff0c;并支持自动处理数据库操作产生的异常 在Spring2.5版本中&#xff0c;引…

校园网拨号上网环境下多开虚拟机,实现宿主机与虚拟机互通,并访问外部网络

校园网某些登录客户端只允许同一时间一台设备登录&#xff0c;因此必须使用NAT模式共享宿主机的真实IP&#xff0c;相当于访问外网时只使用宿主机IP&#xff0c;此方式通过虚拟网卡与物理网卡之间的数据转发实现访问外网及互通 经验证&#xff0c;将centos的物理地址与主机物理…

【概率论基础】 一篇文章缕清概率论常见概念关系

碎碎念&#xff1a;再写CSDN之前有一小段时间写数模公众号的经历&#xff0c;但是公众号看的人实在太少了&#xff0c;而且排版和公式、代码编辑都没有CSDN这么方便&#xff0c;所以坚持一算时间就没有更新了。公众号大多写的是概念性的基础&#xff0c;稍加修改搬到咱们的主战…

《二十二》Qt 音频编程实战---做一个音频播放器

1.UI界面制作 作为一个音乐播放器&#xff0c;最基础的肯定就是播放、暂停、上一首以及下一首&#xff0c;为了使这个界面好看一点&#xff0c;还加入了音量控制、进度条、歌曲列表等内容&#xff0c;至于这种配色和效果好不好看&#xff0c;我也不知道&#xff0c;个人审美一如…

C语言初阶(6) - 指针

目录 1.指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针 - 整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 常量指针和指针常量 (const) 4.1.常量指针 4.2.指针常量 5. 指针运算 5.1 指针-整数 5.2 指针-指针 5.3指针的关系运算 6.…

离线使用evaluate

一、目录 步骤demorouge-n 含义 二、实现 步骤 离线使用evaluate: 1. 下载evaluate 文件&#xff1a;https://github.com/huggingface/evaluate/tree/main2. 离线使用 路径/evaluate-main/metrics/rougedemo import evaluate离线使用evaluate: 1. 下载evaluate 文件&…