东华复试OJ二刷复盘12

进阶12:给定一个以秒为单位的时间t,要求用"<H>:<M>:<S>"的格式来表示这个时间。<H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的"0"。例如,若t=0,则应输出是"0:0:0";若t=3661,则输出"1:1:1"。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main(){
	int n;cin>>n;
	int ansH=0,ansM=0,ansS=0;
	ansS = n;
	while(ansS>=60){
		ansS-=60;ansM+=1;
	}
	while(ansM>=60){
		ansM-=60;ansH+=1;
	}
	cout<<ansH<<':'<<ansM<<':'<<ansS<<endl;
	system("pause");
}

基础79:该阵列由n个正整数构成,阵列中的数字从1开始递增,数字的排序规则是从1开始由中间逆时针向外转出,2出现在1的下面,然后直至输出n为止。

例如当n=5的时候,阵列如下:

5

1 4

2 3

当n=9时,阵列如下:

7 6 5

8 1 4

9 2 3

当n=10时,阵列如下:

7 6 5

8 1 4

9 2 3

10

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int targetNum;
void PrintM(vector<vector<int>>&matrix,int di){
	for(int i=0;i<di;i++){
		for(int j=0;j<di;j++){
			cout<<matrix[i][j]<<' ';
		}
		cout<<endl;
	}
	cout<<endl;
}

void Create(vector<vector<int>>&matrix,int &indexR,int &idnexC,
	int di,int &num,int &loop){
	//cout<<loop<<"-------------------"<<endl;
	//下右上左
	int len=1;
	if(loop==1)len = loop;
	else{
		for(int i=0;i<loop-1;i++){
			len+=2;
		}
	}
	
	for(int i=0;i<len;i++){
		indexR++;num++;
		matrix[indexR][idnexC] = num;
		//PrintM(matrix,di);
		if(num==targetNum)return;
		
	}
	
	for(int i=0;i<len;i++){
		idnexC++;num++;
		matrix[indexR][idnexC] = num;
		//PrintM(matrix,di);
		if(num==targetNum)return;
	}
	
	//-----------
	len++;
	for(int i=0;i<len;i++){
		indexR--;num++;
		matrix[indexR][idnexC] = num;
		//PrintM(matrix,di);
		if(num==targetNum)return;
	}
	
	for(int i=0;i<len;i++){
		idnexC--;num++;
		matrix[indexR][idnexC] = num;
		//PrintM(matrix,di);
		if(num==targetNum)return;
	}
	
	loop++;
}

int main(){
	while(cin>>targetNum){
		int di=1;
		for(int i=2;;i++){
			if(i*i >= targetNum){
				di = i;break;
			}
		}
		vector<vector<int>> matrix(di,vector<int>(di,0));
		int indexR,idnexC;
		if(di%2==1){
			indexR=di/2;idnexC=di/2;
		}
		else {
			indexR=di/2-1;idnexC=di/2-1;
		}
		int num=1;
		matrix[indexR][idnexC] = 1;
		//下右上左
		int loop=1;
		while(num<targetNum){
			Create(matrix,indexR,idnexC,di,num,loop);
		}
		//输出方式
		//PrintM(matrix,di);
		//检查列,跳过整列为0的列
		int SkipCol=-1;
		for(int i=0;i<di;i++){
			int currentcolIsSkip=1;
			for(int j=0;j<di;j++){
				if(matrix[j][i]!=0)currentcolIsSkip=0;
			}
			if(currentcolIsSkip)SkipCol=i;
		}
		
		for(int i=0;i<di;i++){
			for(int j=0;j<di;j++){
				if(j!=SkipCol&&matrix[i][j] != 0)cout<<matrix[i][j];
				else if(j==SkipCol)continue;
				else cout<<' ';
                if(matrix[i][j] != targetNum)cout<<' ';
				
			}
			cout<<endl;
		}
		
	}
	system("pause");
}
  • 做了很久,不熟。多次尝试和画图后发现向下和右的位数分别为1、3、5,而上和左为2、4次。

题72:考虑在下面被显示的数字金字塔(第n行有n列)。写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大。每前进一步可以走到它的正下方或者右下方(往下一行、往右一列)的位置。

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大和:30

  • 动态规划思想:用一个多维数组记录该坐标含义下的最大值,比如无限背包中i个物品j个负重下的最大值,数字金字塔的是i行j列元素到达最底层的最大值。
  • 函数形式:
    • 辅助数组 dp
    • 值类型 DP(参数){
    • if(边界条件) 边界的返回值;
    • if(辅助数组dp已有值可直接返回)
    • 分支进入语句,return 记录值 = 所有分支中最大的一个}
  • 使用DP函数时,为最初始的状态值。
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> dp;
vector<vector<int>> matrix;

int DPfunc(int row,int col,int edge){
	if(row == edge) return matrix[row][col];
	if(dp[row][col] !=-1)return dp[row][col];
	dp[row][col] = matrix[row][col] + 
	max(DPfunc(row+1,col,edge),DPfunc(row+1,col+1,edge));
	return dp[row][col];
}

int main(){
	int di;cin>>di;
	matrix = vector<vector<int>> (di,vector<int>(di,0));
	dp = vector<vector<int>> (di,vector<int>(di,-1));
	for(int i=0;i<di;i++){
		for(int j=0;j<i+1;j++){
			cin>>matrix[i][j];
		}
	}
	//------------
	int ans = DPfunc(0,0,di-1);
	cout<<ans<<endl;
	system("pause");
}

题76:给你一张5行5列的效益表,表中的数字均为大于等于0的整数,要求在这张表中选出5个不同行不同列的数字,使这5个数字的和最大。

  • 类似于八皇后的DFS问题。与动态规划很像却又不同,首先它不需要辅助数组和return记录当前分支路口中最大的值,它直接传递每个分支的值,在边界处进行比较和更新即可。
  • 函数形式:
    • void DFS(int sum,参数){
    • if(边界或越界后处理)ans =max(ans,sum); return;
    • 进入分支语句
      • new参数,DFS(sum+本分支的值,new参数)
    • return;}
  • 注意要new参数,否则修改的是本层参数,后续分支用不了该分支对应参数。

Reinforcement learning is a machine learning approach that learns optimal strategies through interaction with the environment. In the reinforcement learning framework, an agent observes the state of the environment and takes corresponding actions in order to receive rewards or penalties. The goal of the agent is to find a policy that maximizes long-term cumulative rewards through continuous exploration and learning. Unlike supervised learning, reinforcement learning usually does not rely on large amounts of labeled data but improves decision-making ability through trial and error. Reinforcement learning has achieved success in many complex tasks such as robotic control, autonomous driving, and game artificial intelligence. In the famous Go program AlphaGo, reinforcement learning was combined with deep neural networks, enabling computers to reach or even surpass the level of top human players. However, in practical applications, reinforcement learning still faces challenges such as low sample efficiency and high training costs.

  • 强化学习是通过和环境互动来学习最优策略的机器学习方法。在强化学习框架中,智能体观察环境的状态并采取相关的行动来获得强力或惩罚。智能体的目标是通过持续的探索和学习来找到一个策略能够最大化长期的累积奖励。不同于监督学习,强化学习通常不依赖于大量的带标签的数据,而是通过试验和错误来提高决策能力。强化学习已经在许多的复杂任务中取得了成功,例如机器人控制、自动驾驶和游戏人工智能。在最著名的Go程序AlphaGo中,强化学习结合深度神经网络,使得计算机达到了甚至超越了顶尖人类选手的水平。然而,在实际应用中,强化学习仍然面临挑战,例如低样本效率和高额训练开销。
相关推荐
滕州市燕猫虎计算机科技工作室个体工商户9 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
别动我齐刘海10 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
xier_ran11 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
li星野13 小时前
5 TYPES OF ADVERBS — One-Page Notes
学习
星恒随风13 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
罗西的思考14 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (7)— 混合机制
笔记·学习
starsky7623814 小时前
Agent学习——上下文工程(三)
学习
xier_ran15 小时前
【infra之路】AI 编译器学习笔记(四):PatternRewriter 与贪心 driver
人工智能·笔记·学习
小弥儿16 小时前
GitHub今日热榜 | 2026-10-12:pytorch 上升四位
人工智能·pytorch·学习·开源·github
AOI小白新手上路16 小时前
DeepLens 的课程学习自动设计与同源仿真论文综述
学习