谈点个人感想:锐格这个题目和数据要是再不维护,估计直接就裂开了,跪求学校升级改进一下OJ系统和题目Orz

实验一 递归与分治

6104

#include<bits/stdc++.h>

using namespace std;

int max_num(int a[], int m,int n)
{
int mid = (m+n)/2;
if(m==n) return a[m];
else
{
int maxa = max_num(a, m, mid);
int maxb = max_num(a, mid+1, n);
return max(maxa, maxb);
}
} int main()
{
int num;
cin>>num;
int a[num];
for(int i=0;i<num;i++)
cin>>a[i];
cout<<max_num(a, 0, num-1);
return 0;
}

6103(归并排序模板题)

#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;

int a[N], tmp[N];

void merge_sort(int q[], int l,int r)
{
if(l >= r) return;
int mid = l+r>>1;
merge_sort(q, l, mid);
merge_sort(q, mid+1, r); int k = 0,i = l, j = mid +1;
while(i<=mid && j<=r)
{
if(q[i] <= q[j]) tmp[k++] = q[i++];
else tmp[k++] = q[j++];
}
while(i<=mid) tmp[k++] = q[i++];
while(j<=r) tmp[k++] = q[j++]; for(i = l, j = 0; i<=r; i++, j++)
q[i] = tmp[j];
} int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
merge_sort(a, 0, n-1);
for(int i=0;i<n;i++)
printf("%d ", a[i]); return 0;
}

6102

锐格显示没有输出,我:???

#include <iostream>
#include <cstring>
using namespace std;
int tile=1;
int Board[100][100]; /*
* tr : 棋盘左上角格子的行号
* tc : 棋盘左上角格子的列号
* dr : 特殊方格左上角顶点的行号
* dc特殊方格左上角顶点的列号
* size :棋盘规格 n*n
* title: 骨牌的型号
*/
void ChessBoard(int tr,int tc,int dr,int dc,int size)
{
if(size==1)
return;
int t=tile++;
int s=size/2;
if(dr<tr+s&&dc<tc+s) //特殊方格位于左上角的棋盘时
ChessBoard(tr,tc,dr,dc,s); //对左上角棋盘继续进行递归划分覆盖
else
{
Board[tr+s-1][tc+s-1]=t; //将t号L型骨牌覆盖当前子棋盘右下角的方格
ChessBoard(tr,tc,tr+s-1,tc+s-1,s); //对左上角棋盘继续进行递归划分覆盖
}
if(dr<tr+s&&dc>=tc+s) //覆盖右上角棋盘
ChessBoard(tr,tc+s,dr,dc,s); //对右上角棋盘继续进行递归划分覆盖
else
{
Board[tr+s-1][tc+s]=t; //将t号L型骨牌覆盖当前子棋盘左下角的方格
ChessBoard(tr,tc+s,tr+s-1,tc+s,s); //对右上角棋盘继续进行递归划分覆盖
}
if(dr>=tr+s&&dc<tc+s) //特殊方格位于左下角的棋盘时
ChessBoard(tr+s,tc,dr,dc,s); //对左下角棋盘继续进行递归划分覆盖
else
{
Board[tr+s][tc+s-1]=t; //将t号L型骨牌覆盖当前子棋盘左下角的方格
ChessBoard(tr+s,tc,tr+s,tc+s-1,s); //对右上角棋盘继续进行递归划分覆盖
}
if(dr>=tr+s&&dc>=tc+s) //特殊方格位于右下角的棋盘时
ChessBoard(tr+s,tc+s,dr,dc,s); //对右下角棋盘继续进行递归划分覆盖
else
{
Board[tr+s][tc+s]=t; //将t号L型骨牌覆盖当前子棋盘左上角的方格
ChessBoard(tr+s,tc+s,tr+s,tc+s,s); //对右下角棋盘继续进行递归划分覆盖
}
}
int main()
{
int size,x,y;
cin>>size;
cin>>x>>y;
memset(Board,0,sizeof(Board));
ChessBoard(1,1,x,y,size);
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
printf("%2d ",Board[i][j]);
cout<<endl;
} return 0;
}

动态规划

6107

锐格报数组越界,爆内存,绝了数组改到两位数好使了,锐格的内存管理太精致了- -

#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#define CRT_SECURE_NO_WARNINGS
int dp[11][11];
int path[11][11];
using namespace std;
void LCSFindLongest(char X[], char Y[], int m, int n);
void LCS(int i, int j, char X[]);
int main() {
char X[100];
char Y[100];
X[0] = '!';
Y[0] = '!';
int m;
int n;
cin >> m >> n;
for (int i = 1; i <= m; i++) {
cin >> X[i];
}
for (int i = 1; i <= n; i++) {
cin >> Y[i];
}
X[m + 1] = '\0';
Y[n + 1] = '\0';
LCSFindLongest(X, Y, m, n);
LCS(m, n, X);
return 0;
} void LCSFindLongest(char X[], char Y[], int m, int n) { for (int i = 1; i <= m; i++) {
dp[i][0] = 0;
}
for (int i = 1; i <= n; i++) {
dp[0][i] = 0;
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (X[i] == Y[j]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
path[i][j] = 1;
}
else if (dp[i - 1][j] > dp[i][j - 1]) {
dp[i][j] = dp[i - 1][j];
path[i][j] = 2;
}
else if (dp[i - 1][j] < dp[i][j - 1]) {
dp[i][j] = dp[i][j - 1];
path[i][j] = 3;
}
else {
dp[i][j] = dp[i - 1][j];
path[i][j] = 4;
}
}
}
} void LCS(int i, int j, char X[]) {
if (i == 0 || j == 0) {
return;
}
if (path[i][j] == 1) {
LCS(i - 1, j - 1, X);
cout << X[i];
}
else if (path[i][j] == 2 || path[i][j] == 4) {
LCS(i - 1, j, X);
}
else if (path[i][j] == 3) {
LCS(i, j - 1, X);
}
}

6106

#include<bits/stdc++.h>

using namespace std;
int main() {
int n;
cin >> n;
int orc[101][101]; // 原来的数。
int dp[101][101]; // 动态规划。
int path[101][101]; // 用来记录路径。
int number[101]; // 用来记录走过的数字。
memset(orc, 0, sizeof(orc));
memset(dp, 0, sizeof(dp));
memset(path, 0, sizeof(path));
memset(number, 0, sizeof(number));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> orc[i][j];
}
}
dp[1][1] = orc[1][1]; for (int i = 1; i <= n; i++) { // 进行递归,就是判断该位置的最大的情况有可能是从上方或者左上方来的。
for (int j = 1; j <= i; j++) {
if (dp[i - 1][j] > dp[i - 1][j - 1]) {
dp[i][j] = dp[i - 1][j] + orc[i][j];
path[i][j] = 1; // 用来记录是从正上方来的。
}
else {
dp[i][j] = dp[i - 1][j - 1] + orc[i][j];
path[i][j] = 2; // 用来记录是从左上方来的。
}
}
}
int mm = 0;
int maxn = 0; // 用来记录最大的出口的位置。
for (int i = 0; i <= n; i++) {
if (mm < dp[n][i]) {
mm = dp[n][i];
maxn = i;
}
}
for (int i = n; i > 0; i--) { // 从path路径中提取出来经过的数字放在number中。
if (path[i][maxn] == 1) {
number[i] = orc[i][maxn];
maxn = maxn;
}
else if (path[i][maxn] == 2) {
number[i] = orc[i][maxn];
maxn = maxn - 1;
}
}
cout << mm << endl; // 找出最后一行的最大的数。
for (int i = 1; i <= n; i++) {
if (i != n) {
cout << number[i] << " ";
}
else cout << number[i] << endl;
}
return 0;
}

[nefu]算法设计与分析-锐格实验的更多相关文章

  1. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划

    由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...

  2. 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)

    PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...

  3. 算法设计与分析 - AC 题目 - 第 2 弹

    PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...

  4. 算法设计与分析-Week12

    题目描述 You are given coins of different denominations and a total amount of money amount. Write a func ...

  5. 『嗨威说』算法设计与分析 - PTA 数字三角形 / 最大子段和 / 编辑距离问题(第三章上机实践报告)

    本文索引目录: 一.PTA实验报告题1 : 数字三角形 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 最大子段和 2.1 实践题目 ...

  6. 算法设计与分析——n后问题(回溯法+位运算)

    一.问题描述 在n×n格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 二.算法设计 解n后问题的回溯算法描述如下: #include ...

  7. 算法设计与分析 - 李春葆 - 第二版 - html v2

    1 .1 第 1 章─概论   1.1.1 练习题   1 . 下列关于算法的说法中正确的有( ).   Ⅰ Ⅱ Ⅲ Ⅳ .求解某一类问题的算法是唯一的   .算法必须在有限步操作之后停止   .算法 ...

  8. 南大算法设计与分析课程复习笔记(1) L1 - Model of computation

    一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...

  9. 算法设计与分析基础 (Anany Levitin 著)

    第1章 绪论 1.1 什么是算法 1.2 算法问题求解基础 1.2.1 理解问题 1.2.2 了解计算设备的性能 1.2.3 在精确解法和近似解法之间做出选择 1.2.4 算法的设计技术 1.2.5 ...

  10. 『嗨威说』算法设计与分析 - PTA 程序存储问题 / 删数问题 / 最优合并问题(第四章上机实践报告)

    本文索引目录: 一.PTA实验报告题1 : 程序存储问题 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 删数问题 2.1 实践题目 ...

随机推荐

  1. win10版本eclipse安装教程——

    第一步:下载jdk,配置环境 见我第二篇博客有说明:点击即可进入 第二步:下载eclipse 点击即可进入官网下载 点击 Download Packages,进入eclipse下载页面.从 Eclip ...

  2. html页面下载为docx文档

    1.安装要用到的两个插件:html-docx-js-typescript.file-saver. 2.导入两个方法: import { asBlob } from 'html-docx-js-type ...

  3. 字符串转换为Base64,作为token 传入到后台

    一.Base64 转换的方法 function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabc ...

  4. OSIDP-多处理器和实时调度-10

    多处理器调度 多处理器系统分类: 1.松耦合.分布式多处理器(集群):一系列相对自治的系统组成,每个处理器有属于自己的内存和I/O通道. 2.专用处理器:有一个通用的主处理器,专用处理器由主处理器控制 ...

  5. [Leetcode 98]判断有效的二叉搜索树Validate Binary Search Tree

    题目 https://leetcode.com/problems/validate-binary-search-tree 判断所给二叉树是否是二叉搜索树 二叉搜索树:其值left<root< ...

  6. [C#]接口Interface快速Demo

    参考代码1: using System; namespace InterfaceDemo { /// <summary> /// 定义一个爬树接口 /// </summary> ...

  7. NO_PUBKEY 76F1A20FF987672F

    在ubuntu18.04上安装win时,执行sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic ...

  8. Linux centos7.6 安装 docker

    1.安装官网教程 https://docs.docker.com/engine/install/centos/ 2.卸载之前的 docker sudo yum remove docker \ dock ...

  9. You need to run build with JDK or have tools.jar on the classpath.If this occures during eclipse build make sure you run eclipse under JDK as well 错误

    我打开项目报错是这样的  pom.xml jdk配置什么的都是好的    但是还是报错 解决错误 : 1.打开你eclipse的根目录,找到eclipse.ini  这个文件夹打开 2.打开是这个样子 ...

  10. typescript 的动态引入组件

    环境: Arco Pro + Vue3 vite自身对动态字符串形式的组件引入是有限制的, 以下写法会报错 官方文档中也对此有做说明, 只能通过固定形式去引用 以下形式不会报错, 但这种固定格式的局限 ...