当前位置: 首页 > article >正文

第34次CCF-CSP认证真题解析(目标300分做法)

第34次CCF-CSP认证

  • 矩阵重塑(其一)
  • AC代码及解析
  • 矩阵重塑(其二)
  • AC代码及解析
  • 货物调度
  • AC代码及解析

矩阵重塑(其一)

在这里插入图片描述

输入输出及样例:

在这里插入图片描述

AC代码及解析

  • 1.线性化原矩阵 :由于cin的特性我们直接把给定的矩阵按照题目的意思转换成一维数组即可

  • 2.填充新矩阵 :然后对于新的矩阵 我们只需要按照新的规模p*q重新排版即可

#include <bits/stdc++.h>
using namespace std;
int n,m,p,q;
const int N=1e4+10;
int a[N];
int main(){cin>>n>>m>>p>>q;for(int i=0;i<n*m;i++) cin>>a[i];int index=0;for(int i=0;i<p;i++){for(int j=0;j<q;j++){cout<<a[index]<<' ';index++;}cout<<endl;}return 0;
}

矩阵重塑(其二)

在这里插入图片描述

输入输出及样例:

在这里插入图片描述

AC代码及解析

基本思路:受到第一题启发 我们可以将这个二维矩阵转化成一维数组的形式
对于这三种操作:

  • 1.重塑
  • 我们对应一维数组中的元素是不变的 只需要将改变之后的矩阵规格更新一下 也就是n=a m=b
  • 2.转置
  • 也就是行列互换 具体来说就是 原来重塑的时候 我们是如何找到矩阵上的元素对应数组的下标
    比如说(1,2)
    我们就用【(当前行 1 乘以矩阵的列数 m )+ 2 】得到对应数组S的下标
    而现在转置之后 行和列的地位互换
    是不是就是 【(用当前列 2 乘以矩阵的行数 n)+1 】这样一个一个计算 得到对应 转置之后新的数组SS 之后再交换我们行和列的数值 这样就完成了一次转置操作
  • 3.查询对应位置上的元素
    直接输出对应数组元素就好
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m,t;
int op,a,b;//这是操作格式
int s[N];//将重塑前的M转化为一维数组
int tmp[N];
int main()
{cin>>n>>m>>t;//构造一维数组for(int i=0;i<n*m;i++){cin>>s[i];}//处理每一个查询while(t--){cin>>op>>a>>b;if(op==1)//进行矩阵的重塑 不论怎么重塑都不会改变其对应一维数组的值的顺序//所以只需要更新一下矩阵大小的规模就行{n=a;m=b;}else if(op==2)//进行矩阵的转置(行列互换){for(int i=0;i<n;i++)//i表示当前行数{for(int j=0;j<m;j++)//j表示当前列数{tmp[j*n+i]=s[i*m+j];//本质上就是行和列的地位互换了 i改成j n改成m}}//更新对应一维数组的值for(int i=0;i<n*m;i++){s[i]=tmp[i];}//更新矩阵规模(本质上就是交换行和列的数值)int tt=n;n=m;m=tt;}else if(op==3)//进行查询操作(只有查询操作才需要输出){cout<<s[a*m+b]<<endl;}}return 0;
}

货物调度

在这里插入图片描述

输入输出及样例:

在这里插入图片描述

AC代码及解析

写了一个世纪 结果只能暴力拿30分 道心破碎 虽然感觉这道题满分解是dp 但是真正写起来真的真的好困难 连最基本的选择和状态都很难确定下来 更别说状态转移方程了 哈哈
这里附上大佬解析:文章链接

#include<bits/stdc++.h>
using namespace std;
#define ll long longint dp[1005][40010];//前i个仓库费用j可以获得的最大总价值
vector<int>a[1005];//第i个仓库的第j个货物的价值
int b[1005],c[1005];//仓库属性
bool dcmp(int a,int b){return a>b;
}
int main(){int n,m,v;cin>>n>>m>>v;for(int i=0;i<=40000;i++)dp[0][i]=0;for(int i=1;i<=n;i++){cin>>b[i]>>c[i];}for(int i=1;i<=m;i++){int val,t;cin>>val>>t;t++;a[t].push_back(val);}for(int i=1;i<=n;i++){sort(a[i].begin(),a[i].end(),dcmp);}for(int i=1;i<=n;i++){for(int j=0;j<=40000;j++){dp[i][j]=dp[i-1][j];//不选iint sum=0;for(int k=0;k<a[i].size();k++){//选iif(b[i]+c[i]*(k+1)>j)break;sum+=a[i][k];//收益和dp[i][j]=max(dp[i][j],dp[i-1][j-b[i]-c[i]*(k+1)]+sum-b[i]-c[i]*(k+1));}}}int ans;for(int i=0;i<=40000;i++){if(dp[n][i]>=v){ans=i;break;}}cout<<ans;return 0;
}
http://www.lryc.cn/news/2404458.html

相关文章:

  • video-audio-extractor:视频转换为音频
  • rk3588 区分两个相同的usb相机
  • [概率论基本概念4]什么是无偏估计
  • 乐观锁与悲观锁的实现和应用
  • PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式
  • 【vue】Uniapp 打包Android 文件选择上传问题详解~
  • ASR技术(自动语音识别)深度解析
  • 图论水题2
  • Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
  • 网络编程之服务器模型与UDP编程
  • Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测
  • 阿里云服务器安装nginx并配置前端资源路径(前后端部署到一台服务器并成功访问)
  • Ubuntu 下开机自动执行命令的方法
  • C++11新增重要标准(下)
  • 【第六篇】 SpringBoot的日志基础操作
  • Pluto论文阅读笔记
  • ubuntu显示器未知
  • Faiss向量数据库全面解析:从原理到实战
  • matlab 2024a ​工具箱Aerospsce Toolbox报错​
  • 使用有限计算实现视频生成模型的高效训练
  • Server2003 B-1 Windows操作系统渗透
  • 一次Oracle的非正常关闭
  • AI不会杀死创作,但会杀死平庸
  • JeecgBoot低代码管理平台
  • Fetch与Axios:区别、联系、优缺点及使用差异
  • YOLO11解决方案之分析
  • yolov11与双目测距结合,实现目标的识别和定位测距(onnx版本)
  • 基于51单片机和8X8点阵屏、独立按键的填充消除类小游戏
  • 将数据库表导出为C#实体对象
  • 物联网技术发展与应用研究分析