3.31学习总结

算法

解题思路

使用dfs,对蛋糕每层可能的高度和半径进行穷举.通过观察我们可以知道第一层的圆面积是它上面所有蛋糕层的圆面积之和,所以我们只要去求每层的侧面积就行了.

因为题目要求Ri > Ri+1且Hi > Hi+1,所以我们可以求出每层的最小体积和侧面积,用两个数组分别储存起来.

然后进入dfs我们从最上层开始对每层的高度和半径进行穷举,要注意的是这道题有很多的剪枝要做不然就会超时.

剪枝1:如果接下来每一层都按照最小的来算,依然大于了总体积则可以剪去.

剪枝2:如果接下来每一层都按照最小的来算,结果已经大于了求出的最优值,可以剪去.

剪枝3:通过变形公式,如果接下来的体积用完所需的最小表面积已经大于了最优值,可以剪去.

然后我们在穷举到最后一层的时候用一个变量来记录最小的面积就好了.

代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
int n,m;
int sv[35];
int st[35];
int min1=2147483647;
int dfs(int deep,int v,int s,int lr,int lh)
{if(deep==0){if(v==n&&min1>s)min1=s;return 0;}if(v+sv[deep-1]>n)return 0;if(s+st[deep-1]>min1)return 0;if(s+2*(n-v)/lr>=min1)return 0;for(int i=lr-1;i>=deep;i--){if(deep==m){s=i*i;}int h=min(lh-1,(n-v-sv[deep-1])/(i*i));for(;h>=deep;h--){dfs(deep-1,v+i*i*h,s+2*i*h,i,h);}}return 0;
}
int main()
{scanf("%d%d",&n,&m);for(int x=1;x<=m;x++){sv[x]=sv[x-1]+x*x*x;st[x]=st[x-1]+x*x*2;}dfs(m,0,0,n,n);if(min1==2147483647)min1=0;printf("%d",min1);return 0;
}

 

解题思路

这道题我们用bfs来求逃出迷宫的最短时间.这道题目不同的点在于它多了对应的钥匙和门,并且有的时候还会走回头路.

经过观察可以发现只有找到新的钥匙后走回头路才有意义,所以我们要将钥匙的状态保存下来,这里我们要用到位运算符:&和|.

他们都是在二进制的基础上进行运算的.

&:只有当对应位置都为一运算结果才为一.举例:010&110=010.

|:只有当对应位置都为零运算结果才为一.举例:010|110=110.

了解了这两个位运算符我们就可以用一个值来表示钥匙状态了,我们只要在碰见钥匙时用 '|' 将对应的一加上去,碰到门时用 '&' 判断是否有钥匙就行了.

要注意的是当点所用的时间超过规定时间时就不进入队列.

代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
char g[25][25];
int j[25][25][1030];
int ne[5][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct ss
{int x;int y;int k;int t;
}d[650000];
int l,r;
int n,m,t;
int bfs()
{ss a;while(l<r){for(int x=0;x<4;x++){a.x=d[l].x+ne[x][0];a.y=d[l].y+ne[x][1];a.k=d[l].k;a.t=d[l].t;if(a.x<0||a.y<0||a.x>=n||a.y>=m)continue;if(g[a.x][a.y]!='*'&&j[a.x][a.y][a.k]!=1){if(g[a.x][a.y]=='.'||g[a.x][a.y]=='@'){a.t++;if(a.t>=t)return -1;d[r].x=a.x;d[r].y=a.y;d[r].t=a.t;d[r++].k=a.k;j[a.x][a.y][a.k]=1;}if(g[a.x][a.y]=='^'){a.t++;if(a.t>=t)return -1;return a.t;}if(g[a.x][a.y]>='a'&&g[a.x][a.y]<='z'){a.t++;if(a.t>=t)return -1;a.k=a.k|(1<<(g[a.x][a.y]-'a'));d[r].x=a.x;d[r].y=a.y;d[r].t=a.t;d[r++].k=a.k;j[a.x][a.y][a.k]=1;}if(g[a.x][a.y]>='A'&&g[a.x][a.y]<='Z'){if(a.k&(1<<(g[a.x][a.y]-'A'))){a.t++;if(a.t>=t)return -1;d[r].x=a.x;d[r].y=a.y;d[r].t=a.t;d[r++].k=a.k;j[a.x][a.y][a.k]=1;}}}}l++;}return -1;
}
int main()
{while(~scanf("%d%d%d",&n,&m,&t)){memset(j,0,sizeof(int )*25*25*1030);l=r=0;for(int x=0;x<n;x++){scanf("%s",g[x]);}for(int x=0;x<n;x++){for(int y=0;y<m;y++){if(g[x][y]=='@'){d[r].x=x;d[r].y=y;d[r].t=0;d[r++].k=0;j[x][y][0]=1;}}}printf("%d\n",bfs());}return 0;
}
类似的题

 解题思路

这道题目与上面的题非常相像只是在进行位运算是有所不同,进行一点小小的处理就行了.

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
char g[100][100];
int j[100][100][100];
int ne[5][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct ss
{int x;int y;int k;int t;
}d[650000];
int l,r;
int n,m,t;
int bfs()
{ss a;while(l<r){for(int x=0;x<4;x++){a.x=d[l].x+ne[x][0];a.y=d[l].y+ne[x][1];a.k=d[l].k;a.t=d[l].t;if(a.x<0||a.y<0||a.x>=n||a.y>=m)continue;if(g[a.x][a.y]!='#'&&j[a.x][a.y][a.k]!=1){if(g[a.x][a.y]=='.'||g[a.x][a.y]=='*'){a.t++;d[r].x=a.x;d[r].y=a.y;d[r].t=a.t;d[r++].k=a.k;j[a.x][a.y][a.k]=1;}if(g[a.x][a.y]=='X'){a.t++;return a.t;}if(g[a.x][a.y]>='a'&&g[a.x][a.y]<='z'){a.t++;int p;switch(g[a.x][a.y]){case 'b':p=1;break;case 'y':p=2;break;case 'r':p=3;break;case 'g':p=4;break;}if(a.k|(1<<p))a.k=a.k|(1<<p);d[r].x=a.x;d[r].y=a.y;d[r].t=a.t;d[r++].k=a.k;j[a.x][a.y][a.k]=1;}if(g[a.x][a.y]>='A'&&g[a.x][a.y]<='Z'){int p;switch(g[a.x][a.y]){case 'B':p=1;break;case 'Y':p=2;break;case 'R':p=3;break;case 'G':p=4;break;}if(a.k&(1<<p)){a.t++;d[r].x=a.x;d[r].y=a.y;d[r].t=a.t;d[r++].k=a.k;j[a.x][a.y][a.k]=1;}}}}l++;}return -1;
}
int main()
{while(1){scanf("%d%d",&n,&m);if(n==0&&m==0)break;memset(j,0,sizeof(int )*100*100*100);l=r=0;for(int x=0;x<n;x++){scanf("%s",g[x]);}for(int x=0;x<n;x++){for(int y=0;y<m;y++){if(g[x][y]=='*'){d[r].x=x;d[r].y=y;d[r].t=0;d[r++].k=0;j[x][y][0]=1;}}}int p;p=bfs();if(p==-1){printf("The poor student is trapped!\n",p);}else{printf("Escape possible in %d steps.\n",p);}}return 0;
}

java知识学习

多态(补充)

通过这两天对多态的学习,我学会了多态的一些知识,所以在此补充.

多态的弊端是无法调用子类特有的方法,只能调用父类和子类共有的方法,这时我们可以通过强制转换然后赋值给另一个子类的对象来调用子类特有的方法.

public class person {private String name;private int age;public person() {}public person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void show(){System.out.println(name+","+age);}
}
public class student extends person {@Overridepublic void show() {System.out.println("学生的信息:"+getName()+","+getAge());}public void play(){System.out.println("子类的特有方法");}
}

以上是两个类,它们两个是继承关系person是student的父类.

public class Main {public static void main(String[] args) {person a=new student();a.setAge(18);a.setName("张三");a.show();a.play();}
}

当如此调用这两个类时,会报错,无法使用子类特有的play方法

当我们使用强制转换后就可以使用

public class Main {public static void main(String[] args) {person a=new student();a.setAge(18);a.setName("张三");a.show();student  b=(student) a;b.play();}
}

运行结果

注意:考虑到当数据量变大时无法记住谁是谁的父类时,进行强制类型转换时可能出现异常,因此进行类型转换之前应先通过instanceof运算符来判断是否可以成功转换.

运算符:instanceof

instanceof 运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以 是接口,可以把接口理解成一种特殊的类),它用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是,则返回true,否则返回 false。

在使用 instanceof 运算符时需要注意: instanceof 运算符前面操作数的编译时类型要么与后面的类相 同,要么与后面的类具有父子继承关系,否则会引起编译错误.

使用方法

student  b=new student();
if(a instanceof student==true)
{b=(student)a;
}

总结

这个周末学习java的时间有点短,学习的有点慢需要加快速度

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

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

相关文章

C语言实现猜数字游戏(有提示,限制次数版)

这次的猜数字游戏我添加了新的功能&#xff1a;为玩家添加了提示&#xff0c;以及输入数字的限制次数。 首先&#xff0c;我们的猜数字游戏需要一个菜单&#xff0c;来让玩家可以选择玩游戏还是退出游戏&#xff0c;所以我们需要开始就打印一个菜单&#xff1a; int main() {…

Mac air 个人免费版VMWare Fusion安装及配置教程

Mac air 安装免费版VMWare Fusion教程及问题解决 1、下载VMWare Fusion2、下载wins镜像文件3、开始配置4、出现的问题及解决方法4.1 如何跳过启动时的网络连接4.2 启动后&#xff0c;无法连接网络怎么办4.3 怎么实现将文件拖拽到虚拟机中 当你手上是一台Mac电脑&#xff0c;却需…

VS Code常用前端开发插件和基础配置

VS Code插件安装 VS Code提供了非常丰富的插件功能&#xff0c;根据你的需要&#xff0c;安装对应的插件可以大大提高开发效率。 完成前端开发&#xff0c;常见插件介绍&#xff1a; 1、Chinese (Simplified) Language Pack 适用于 VS Code 的中文&#xff08;简体&#xff…

【原创】基于分位数回归的卷积长短期结合注意力机制的神经网络(CNN-QRLSTM-Attention)回归预测的MATLAB实现

基于分位数回归的卷积长短期结合注意力机制的神经网络&#xff08;CNN-QRLSTM-Attention&#xff09;是一种用于时间序列数据预测的深度学习模型。该模型结合了卷积神经网络&#xff08;CNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;和注意力机制&#xff08;A…

C++ 数组 结构编程题

一 求100以内的所有素数 /* * 需要标记2~100 之间的数是否处理 * 用数组&#xff0c;初始为0 表示都是素数&#xff0c;如果 判断为合数则置为1过用 */ #include<stdio.h> #include<math.h> int main() {const int n 100;int isPrim[n 1] { 0 };int i, j;for (…

MAC的Safari浏览器没有声音解决办法

有一段时间没打开电脑&#xff0c;也不知道是系统自动更新或是什么缘故&#xff0c;所有浏览器都无法正常发声。 现象如下&#xff1a; 首先&#xff0c;Safari浏览器无法自动播放声音&#xff0c;下载的360浏览器现象一致&#xff0c;但是播放其他音乐播放软件和视频软件都正…

JavaScript(二)---【js数组、js对象、this指针】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 一.js数组 在js中也有数组的概念&#xff0c;数组使用“[]”定义&#xff0c;其中数组中还可以嵌套数组从而达到多层数组的作用。 访问数组中的某个元素&#xff0c;我们可以直…

pymysql使用记录

最近由于需要来学习一下pymysql。 先来认识一下pymysql&#xff1a; PyMySQL 是 Python 中一个用于连接 MySQL 数据库的库。它允许 Python 程序通过简单的 API 调用来连接、操作和管理 MySQL 数据库。PyMySQL 是在 Python 中使用纯 Python 编写的&#xff0c;因此它可以在几…

MySQL编程实战LeetCode经典考题

文章简介 本文主要收集了LeetCode上关于MySQL的一些经典考题。 后续也会陆续把所有经典考题补充完整。 175.组合两个表 175.组合两个表 解答&#xff1a; select p.FirstName as firstName, p.LastName as lastName,a.City as city, a.State as state from Person p l…

loadbalancer 引入与使用

在消费中pom中引入 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> 请求调用加 LoadBalanced 注解 进行服务调用 默认负载均衡是轮训模式 想要切换…

【b站李炎恢】Vue.js Element UI 下 | 十天技能课堂 | 更新中... | 李炎恢

课程地址&#xff1a;【Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢】 https://www.bilibili.com/video/BV1U54y127GB/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 备注&#xff1a;虽然标题声明还在更新中&#xff0c;但是看一些常用…

Python库使用介绍 LivermorE AI Projector for Computed Tomography LEAP

Python库使用介绍 LivermorE AI Projector for Computed Tomography LEAP 前言Projector 用于设定投影参数的类参数解释&#xff1a;其它功能load_param(str filepath)forward(ipt, project_mode"forward") 样例代码后记 前言 github开源代码 python API文档 作为一…

TypeScript-自动编译

1.生成文件 tsc --init 2.修改配置文件 说明&#xff1a;通过CTRLF搜索到以下单词&#xff0c;进行修改。 "strict": true, //是否开启严格模式 "outDir": "./outFile", //表示ts文件最终编译为js文件&#xff0c;js文件存放的位置 3.新…

C++心决之命名空间、重载函数和引用

目录 1. C关键字(C98) 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 3. C输入&输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C支持函数重载的原理--名字修饰(name Mangling) 6. 引用 6.1 引用概念 6.2 引用特性…

基于spark的大数据分析预测地震受灾情况的系统设计

基于spark的大数据分析预测地震受灾情况的系统设计 在本篇博客中,我们将介绍如何使用Apache Spark框架进行地震受灾情况的预测。我们将结合数据分析、特征工程、模型训练和评估等步骤,最终建立一个预测模型来预测地震造成的破坏程度,同时使用可视化大屏的方式展示数据的分布…

DreamSim技术小结

paperhttps://arxiv.org/abs/2306.09344codehttps://github.com/ssundaram21/dreamsimorgMiT个人博客主页http://myhz0606.com/article/dream_sim 1 Motivation 目前较为成熟度量图片相似性的做法是通过模型将图片转为embedding&#xff0c;再用余弦相似度来度量相似性。虽然…

【数据分析面试】1. 计算年度收入百分比(SQL)

题目 你需要为公司的营收来源生成一份年度报告。计算截止目前为止&#xff0c;在表格中记录的第一年和最后一年所创造的总收入百分比。将百分比四舍五入到两位小数。 示例&#xff1a; 输入&#xff1a; annual_payments 表 列名类型amountINTEGERcreated_atDATETIMEstatusV…

Linux企业级别日志的查找

企业级别日志的查找 查看mysql数据库的日志错误日志&#xff08;Error Log&#xff09;查询日志&#xff08;General Query Log&#xff09;慢查询日志&#xff08;Slow Query Log&#xff09;事务日志&#xff08;Transaction Log&#xff09;二进制日志&#xff08;Binary Lo…

Thread 之start 和run 的区别

Java Thread 之start 和run 的区别 用start方法来启动线程&#xff0c;真正实现了多线程运行&#xff0c;这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程&#xff0c;这时此线程处于就绪&#xff08;可运行&#x…

【MATLAB源码-第23期】基于matlab的短时傅里叶STFT信号变换仿真,得到信号的时频曲线图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 短时傅里叶变换&#xff08;Short-Time Fourier Transform&#xff0c;STFT&#xff09;是傅里叶变换的一种扩展&#xff0c;用于分析信号在时域和频域上的变化。描述如下&#xff1a; 1. **时域与频域分析**&#xff1a; …