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;却需…

el-upload上传图片给SpringBoot后端

需求 我的需求是&#xff0c;将上传文件的el-upload放到一个el-form里面&#xff0c;点击保存才提交&#xff0c;所以不能直接用action的方式&#xff0c;下面采用自定义上传的方式来完成Vue前端 主要是使用editForm.imgList来保存图片的信息&#xff0c;注意这里是一个对象&am…

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…

小白用Windows(ssh)连接使用 ubuntu(虚拟机)

安装ssh sudo apt install openssh-server 添加用户、密码 sudo useradd fly sudo passwd fly sudo adduser fly sudo 免密登入 [windows 生成密钥&#xff1a;ssh-keygen -t rsa -b 4096 cat ~/.ssh/id_rsa.pub | ssh fly192.168.23.133 "mkdir -p ~/.ssh…

C# 文件

FileStream 类FileModeFileAccessFileShare StreamReader 类和StreamWriter类StreamReader 类StreamWriter类关于using FileStream 类 FileStream <object_name> new FileStream( <file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <…

数据治理-平台详细措施

这里讲平台治理的具体措施&#xff0c;并不是从具体架构来说&#xff0c;而是从详细方法。 名词定义 1.待治理成本 2.浪费量&#xff1a;可以优化计算或者存储 3.累计浪费量&#xff1a;发现时距离今天数*当日浪费量 4.节省成本&#xff1a;完成治理成本 5.白名单管理成本 治理…

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;但是播放其他音乐播放软件和视频软件都正…

【开发工具】Ubuntu复制CSDN代码多余符号的去除

在Ubuntu中使用CSDN复制的代码时&#xff0c;可能会出现\u200的符号&#xff0c;这个符号会影响代码的编译和运行&#xff0c;因此需要找到一种快速删除这种符号的方法。 通过搜索找到了一种替换为空的删除方式&#xff0c;笔者编写了一个适用于Rust的shell脚本&#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问题和答案

什么是MySQL&#xff1f;MySQL的存储引擎有哪些&#xff1f;它们有什么区别&#xff1f; MySQL是一个开源的关系型数据库管理系统&#xff0c;用于存储和管理大量结构化数据。 MySQL的存储引擎包括InnoDB、MyISAM、Memory等。它们在事务支持、并发性能、数据完整性等方面有所不…

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…

【MogDB】解读MogDB5.0.6版本中有关兼容性的一些更新

前言 MogDB于2024-03-30发布了其5.0版本的补丁版本—5.0.6&#xff0c;其在MogDB 5.0.5的基础上新增部分特性并修复了部分缺陷&#xff0c;具体内容可参考官方文档 # MogDB 5.0.6发布说明 相信有一些伙伴和我一样对兼容性的部分感兴趣&#xff0c;因此本篇就针对本次更新的一些…

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;但是看一些常用…

vue知识点: v-if和v-for为何不能同时使用?

在vue2和vue3的官方文档里都写到不推荐 v-if和v-for同时使用&#xff0c;如下代码所示&#xff1a; <li v-for"todo in todos" v-if"!todo.isComplete">{{ todo.text }} </li> 一、vue3文档&#xff1a;列表渲染 | Vue.js 在vue3中&#xff…

将Python程序打包为Windows安装包

本文使用创作助手。 如果你想将Python程序打包为Windows安装包&#xff0c;你可以使用NSIS&#xff08;Nullsoft Scriptable Install System&#xff09;工具。NSIS是一个免费的Windows安装包创建工具。 以下是使用NSIS将Python程序打包为Windows安装包的步骤&#xff1a; 首…