蓝桥杯刷题五

news2024/10/3 4:32:31

1.01背包问题

这题就是01背包问题的模板题 回顾一下01背包 01就是这个东西选和不选

01背包的表达式是f[i]=max(f[i-v]+w,f[i]);

那么这题就可以直接做了 值得注意的是这里只用了一维数组 所以更新的时候要从后往前面更新

#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int f[N];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        int v,w;
        cin>>v>>w;
        for(int j=m;j>=v;j--)
        {
            f[j]=max(f[j],f[j-v]+w);
        }
    }
    cout<<f[m]<<endl;
    return 0;
}

2.摘花生

这题是简单的线性dp,分析一下假定起点为f[1][1],终点是f[n][m] 并且每次都只能东走或者往南走(这句话就是决定了本题没有任何的循环依赖),所以可以用dp做f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j]

#include <bits/stdc++.h>
using namespace std;
const int N=110;
int f[N][N];
int a[N][N];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        memset(f,0,sizeof f);
        memset(a,0,sizeof a);
        int r,c;
        cin>>r>>c;
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++)
                cin>>a[i][j];
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++)
                f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j];
        cout<<f[r][c]<<endl;
    }
    return 0;
}

3.最长上升子序列

这也是很经典的线性dp。定义f[i]是以i为结尾的最长上升子序列,那我们去找在他前面的比它小的,并且去比较是f[i]大 还是f[j]+1 大 这样递归去求 就可以做了

注意 要把f[i]定义为1先 这是具体含义决定的

#include <bits/stdc++.h>

using namespace std;

const int N = 1010;

int res, a[N], f[N];

int main() {
    int n;  cin >> a[i];

    for (int i = 1; i <= n; i ++) {
        cin >> a[i];
    }

    for (int i = 1; i <= n; i ++) {
        f[i] = 1;
        for (int j = 1; j < i; j ++) {
            if (a[i] > a[j]) {
                f[i] = max(f[i], f[j] + 1);
            }
        }

        res = max(res, f[i]);
    }

    return cout << res << '\n', 0;
}

4.地宫取宝

这个很像递归,

递归怎么递归呢

当走到某个格子上的时候:

(1)如果格子上宝贝的价值大于已有宝贝的最大值,那么可以选择拿或者不拿

(2)如果格子上宝贝的价值小于或者等于已有宝贝的最大值,那么只能选择不拿。

必须从左上角走到右下角,且只要到达右下角时物品个数满足条件即算一种方案。

只能选择向下或者向右走

不是必须到出口时,宝贝数量恰好满足条件,而是可以在任意位置就宝贝数量就可以满足条件,只需保证到达出口时宝贝数量仍然满足条件即可

#include <bits/stdc++.h>
using namespace std;
const int N=15;
int w[N][N];
int n,m;
int k;
int maxl=-0x3f3f3f3f;
const int mod=1000000007;
int dfs(int x,int y,int step,int Max)
{
    if(x>n||y>m||step>k) return 0;
    if(x==n&&y==m)
    {
        if(step==k||(w[x][y]>Max&&step+1==k))
            return 1;
        else return 0;
    }
    if(w[x][y]>Max)
    {
        return dfs(x,y+1,step+1,w[x][y])+
        dfs(x,y+1,step,Max)+
        dfs(x+1,y,step+1,w[x][y])+
        dfs(x+1,y,step,Max);
    }
    else return dfs(x,y+1,step,Max)+dfs(x+1,y,step,Max);
}
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>w[i][j];
    cout<<dfs(1,1,0,-1)%mod<<endl;
    return 0;
}

递归就超时了,所以要想别的办法 这题和摘花生有点像,那么应该是dp

那么就得用dp了 并且要用四维的dp去做x y step Max

由于宝贝的价值可以为0,因此一开始所持有0件宝贝,价值为-1,-1无法索引,为了便于在表中表示,我们将所有宝贝的价值都+1

递归改的代码在这里https://www.acwing.com/solution/content/34645/

初始化状态

#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 55, MOD = 1000000007;

int n, m, k;
int w[N][N];
int f[N][N][13][14];

int main()
{
    cin >> n >> m >> k;
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
        {
            cin >> w[i][j];
            w[i][j] ++ ;
        }

    f[1][1][1][w[1][1]] = 1;
    f[1][1][0][0] = 1;

    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
        {
            if (i == 1 && j == 1) continue;
            for (int u = 0; u <= k; u ++ )
                for (int v = 0; v <= 13; v ++ )
                {
                    int &val = f[i][j][u][v];
                    val = (val + f[i - 1][j][u][v]) % MOD;
                    val = (val + f[i][j - 1][u][v]) % MOD;
                    if (u > 0 && v == w[i][j])
                    {
                        for (int c = 0; c < v; c ++ )
                        {
                            val = (val + f[i - 1][j][u - 1][c]) % MOD;
                            val = (val + f[i][j - 1][u - 1][c]) % MOD;
                        }
                    }
                }
        }

    int res = 0;
    for (int i = 0; i <= 13; i ++ ) res = (res + f[n][m][k][i]) % MOD;

    cout << res << endl;

    return 0;
}

5.波动数列

设第一个数为 x, 第二个数为 x + d1, 第三个数为 x + d[1] + d[2]

第 n 个数为 x + d[1] + d[2] + ... + d[n - 1]; d[i] 的值为 a 或 -b

故数列之和 s = n * x + (n - 1) * d[1] + ... + (n - i) * d[i] + ... + d[n - 1]

x = (s - ((n - 1) * d[1] + ... + (n - i) * d[i] + ... + d[n - 1])) / n

因为 x 为任意整数, 故:

s % n == ((n - 1) * d[1] + ... + (n - i) * d[i] + ... + d[n - 1]) % n

f[0,0]=1

#include <bits/stdc++.h>

using namespace std;

const int N = 1010, MOD = 100000007;

int f[N][N];
int get(int x, int y) {  // 返回 x 除 y 的正余数 
    return (x % y + y) % y; 
}

int main() {
    int n, s, a, b;
    cin >> n >> s >> a >> b;

    f[0][0] = 1;
    for (int i = 1; i < n; i ++) {
        for (int j = 0; j < n; j ++) {
            int x = get(j - (n - i) * a, n);
            int y = get(j + (n - i) * b, n);
            f[i][j] = (f[i - 1][x] + f[i - 1][y]) % MOD;
        }
    }

    return cout << f[n - 1][get(s, n)] << '\n', 0;
}

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

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

相关文章

【JDK8新特性之Stream流-Stream结果收集案例实操】

一.JDK8新特性之Stream流-Stream结果收集以及案例实操 二.Stream结果收集(collect函数)-实例实操 2.1 结果收集到集合中 /*** Stream将结果收集到集合中以及具体的实现 collect*/Testpublic void test01(){// 收集到List中 接口List<Integer> list Stream.of(1, 2, 3…

码住!新手容易上手的5个tiktok数据分析网站

当下短视频已经称霸了各大内容平台&#xff0c;越来越多的创作者进入到短视频赛道&#xff0c;为了更好地运营自己的内容平台&#xff0c;数据分析是必不可少的。很多人都入局了tiktok&#xff0c;对于商家或者博主红人来说&#xff0c;这是比较新平台&#xff0c;希望能在这个…

Spring Cloud Gateway的使用

Spring Cloud Gateway网关Spring Cloud Gateway三大核心概念Route(路由)Predicate(断言)Filter(过滤)开始使用动态路由配置路由断言过滤器实现TokenIP验证拦截Spring Cloud Gateway 网关&#xff1a;微服务中最边缘的服务&#xff0c;用来做用户和微服务的桥梁 没有网关❓&…

Python使用VTK对容积超声图像进行体绘制(三维重建)

目录VTK简介什么是体绘制&#xff1f;体绘制效果图流程CodeQ&AReferenceVTK简介 VTK&#xff08;Visualization Toolkit&#xff09;是一个用于3D计算机图形学、图像处理和可视化的开源软件包。它包括一组C类和工具&#xff0c;可以让用户创建和处理复杂的3D图形和数据可视…

论文投稿指南——中文核心期刊推荐(音乐)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

超纯水制备,MB-106UP抛光树脂的技术解析

超纯水&#xff08;Ultrapure water&#xff09;又称UP水&#xff0c;是指电阻率达到18 MΩ*cm&#xff08;25℃&#xff09;的水。这种水中除了水分子外&#xff0c;几乎没有什么杂质&#xff0c;更没有细菌、病毒、含氯二噁英等有机物&#xff0c;当然也没有人体所需的矿物质…

低代码是什么意思?企业为什么要用低代码平台?

低代码是什么意思&#xff1f;企业为什么要用低代码平台&#xff1f; 这两个问题似乎困扰了很多人&#xff0c;总有粉丝跟小简抱怨&#xff0c;一天到晚念叨低代码&#xff0c;倒是来个人解释清楚啊&#xff01; 来了&#xff0c;这次一文让你全明白。 先解释这几个名词&…

mysql5.7.39数据库服务搭建(win10)

mysql下载下载地址&#xff1a;https://downloads.mysql.com/archives/community如上图&#xff0c;选择了mysql 5.7.39版本&#xff0c;64位Windows操作系统&#xff1b;然后下载ZIP Archive格式的安装文件&#xff0c;点击“Download” 按钮即可。下载好后&#xff0c;进行解…

kafka入门到精通

文章目录一、kafka概述&#xff1f;1.定义1.2消息队列1.2.1 传统消息队列的使用场景1.2.2 消息队列好处1.2.3 消息队列两种模式1.3 kafka基础架构二、kafka快速入门1.1使用docker-compose安装kafka1.2测试访问kafka-manager1.3 查看kafka版本号1.4 查看zookeeper版本号1.5 扩展…

win11右键新建菜单添加选项

需要操作 2 处注册表&#xff0c; 以下以在右键新建菜单中添加 .html 为例 在主键 HKEY_CLASSES_ROOT 中&#xff0c;搜索 .html 找到后 &#xff0c;右键点击它&#xff0c;选 新建 ->项&#xff0c; 在这里插入图片描述 项目名字是&#xff1a;ShellNew 新建后&#x…

【Linux学习笔记】4.Linux 文件基本属性及文件与目录管理

前言 本章介绍Linux的文件基本属性和文件与目录管理。 Linux 文件基本属性 Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。 为了保护系统的安全性&#xff0c;Linux 系统对不同的用户访问同一文件&#xff08;包括目录…

Linux命令及CPU占用过高的定位分析思路

一、vim命令不要使用vim打开大文件&#xff0c;vim会一次性读取所有内容到内存&#xff0c;容易造成宿主机内存溢出。 打开文件前&#xff0c;可以使用du -h命令查看文件大小。一般&#xff0c;100MB以下为宜。1、普通模式j 向下30j 向下移动30行k 向上h 向左l 向右0 到行首^ 到…

3.15版本poi导致FileMagic文件找不到问题解决过程记录

maven中的dependencies和dependencyManagement的区别_shenzhou_yh的博客-CSDN博客 maven 中 dependencies 与 dependencyManagement 的区别_Jaemon的博客-CSDN博客_snapshot dependencies和artifact dependencies的区别 com.alibaba.excel.exception.ExcelAnalysisException: …

ubuntu/linux系统知识(37)systemd管理临时文件的方法systemd-tmpfiles

1、systemd-tmpfiles Linux产生大量的临时文件和目录&#xff0c;例如/tmp、/run 。systemd提供了一个结构化的可配置方法来管理临时文件和目录&#xff0c;即systemd-tmpfiles工具和配套的几个服务&#xff0c;以实现创建、删除和管理临时文件。 systemd创建了几个调用syste…

React(一):初识React、类组件、jsx的基础语法

React&#xff08;一&#xff09;一、初识React1.简单介绍2.React的三个依赖3.Hello React案例二、类组件1.定义类组件并渲染2.绑定事件函数&#xff08;奇怪的this问题&#xff09;3.数组形式数据的展示&#xff08;电影案例&#xff09;4.计数器案例三、jsx语法详解1.jsx的书…

【GUI】用于电动助力车性能分析的GUI(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

202302-第四周资讯

山川软件愿为您提供最优质的服务。 您的每一个疑问都会被认真对待&#xff0c;您的每一个建议都将都会仔细思考。 我们希望人人都能分析大数据&#xff0c;人人都能搭建应用。 因此我们将不断完善我们的DEMO、文档、以及视频&#xff0c;期望能在最大程度上快速帮助用户快速…

最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程

openmvg是一个轻便的可以逐步运行的SfM开源库&#xff0c;它同时实现了增量式和全局式两种算法。 说明文档地址&#xff1a;https://openmvg.readthedocs.io/en/latest/ github主页地址&#xff1a;https://github.com/openMVG/openMVG 1 编译安装 openmvg的安装比较简单&…

【centos7下部署mongodb】

一.安装环境 CentOS7MongoDB4.0.13正式版。 二.下载MongoDB 1.1 官网下载地址&#xff1a;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.13.tgz 1.2 将压缩包通过xftp上传到服务器/opt目录&#xff0c;然后解压、改名 三. 配置环境变量及配置文件 3.1配置系…

8000+字,就说一个字Volatile

简介 volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制&#xff1a;同步块&#xff08;或方法&#xff09;和 volatile 变量&#xff0c;相比于synchronized&#xff08;synchronized通常称为重量级锁&#xff09;&#xff0c;volatile更轻量级&…