王红梅《算法设计与分析(第3版)》部分课后实验代码

这篇具有很好参考价值的文章主要介绍了王红梅《算法设计与分析(第3版)》部分课后实验代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【教材信息】
书名:算法设计与分析(第3版)
ISBN:9787302594390
作者:王红梅

算法设计与分析王红梅,信息学竞赛,递推法,分治法,贪心法,动态规划法
 

【递推法:杨辉三角形】

#include <bits/stdc++.h>
using namespace std;

const int maxn=20;
int a[maxn][maxn];

int main() {
	cout<<"Please input an integer (<=10): ";
	int n;
	cin>>n;
	for(int i=0; i<n; i++) {
		for(int j=0; j<n; j++) {
			a[i][j]=1;
		}
	}

	for(int i=1; i<n; i++) {
		for(int j=1; j<i; j++) {
			a[i][j]=a[i-1][j]+a[i-1][j-1];
		}
	}

	for(int i=0; i<n; i++) { //Output as an isosceles triangle
		for(int k=0; k<26-(5*i/2); k++) {
			printf(" ");
		}

		for(int j=0; j<=i; j++) {
			printf("%5d", a[i][j]);
		}
		printf("\n");
	}

	return 0;
}


/*
Please input an integer (<=10): 7
                              1
                            1    1
                         1    2    1
                       1    3    3    1
                    1    4    6    4    1
                  1    5   10   10    5    1
               1    6   15   20   15    6    1
*/

【分治法:九连环问题】

#include <stdio.h>
#include <string.h>
 
int step;
void up(int n);
void down(int n);
 
void down(int n) {
	if(n==1)
		printf("%d:1 DOWN\n",++step);
	else if(n<=0) return;
	else {
		down(n-2);
		printf("%d:%d DOWN\n",++step,n);
		up(n-2);
		down(n-1);
	}
}
 
void up(int n) {
	if(n==1)
		printf("%d:1 UP\n",++step);
	else if(n<=0) return ;
	else {
		up(n-1);
		down(n-2);
		printf("%d:%d UP\n",++step,n);
		up(n-2);
	}
}
 
int main() {
	int n;
	scanf("%d",&n);
	
	printf("UP's step:\n");
	step=0;
	up(n);
	
	printf("DOWN's step:\n");
	step=0;
	down(n);
	
	printf("END\n");
	
	return 0;
}
 
 
/*
3
UP's step:
1:1 UP
2:2 UP
3:1 DOWN
4:3 UP
5:1 UP
DOWN's step:
1:1 DOWN
2:3 DOWN
3:1 UP
4:2 DOWN
5:1 DOWN
END
*/

【贪心法:田忌赛马】

#include <bits/stdc++.h>
using namespace std;

const int maxn=1000;
int t[maxn],q[maxn];
int money,tlow,qlow,thigh,qhigh;

int main() {
	int n;
	cin>>n;
	for(int i=0; i<n; i++) cin>>t[i];
	for(int i=0; i<n; i++) cin>>q[i];
	sort(t,t+n);
	sort(q,q+n);

	tlow=qlow=0;
	thigh=qhigh=n-1;

	while(tlow<=thigh) {
		if(t[thigh]>q[qhigh]) {
			money+=200;
			thigh--;
			qhigh--;
		} else if(t[thigh]<q[qhigh]) {
			money-=200;
			tlow++;
			qhigh--;
		} else {
			if(t[tlow]>q[qlow]) {
				money+=200;
				tlow++;
				qlow++;
			} else {
				if(t[tlow]<q[qhigh]) money-=200;
				tlow++;
				qhigh--;
			}
		}
	}
	cout<<money<<endl;

	return 0;
}

/*
in:
5
5 2 8 6 2
6 1 8 5 3
out:
600
------------
in:
3
92 83 71
95 87 78
out:
200
*/

【动态规划法:数塔问题】

#include <bits/stdc++.h>
using namespace std;
 
const int maxn=1005;
const int inf=0x3f3f3f3f;
int a[maxn][maxn];
int f[maxn][maxn];
 
int ans=-inf;
 
int main() {
	int n;
	cin>>n;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=i; j++) {
			cin>>a[i][j];
		}
	}
 
	for(int i=1; i<=n; i++) {
		for(int j=0; j<=i+1; j++) { 
			f[i][j]=-inf; //若输入有负数,此段代码就能避坑
		}
	}
 
	f[1][1]=a[1][1];
	for(int i=2; i<=n; i++) {
		for(int j=1; j<=i; j++) {
			f[i][j]=max(f[i-1][j-1],f[i-1][j])+a[i][j];
		}
	}
 
	for(int i=1; i<=n; i++) {
		ans=max(ans,f[n][i]);
	}
	cout<<ans<<endl;
 
	return 0;
}
 
 
/*
in:
5
13
11 8
12 7 26
6 14 15 8
12 7 13 24 11
out:
86
-----------------------------
in:
5
3
2 6
1 8 7
9 1 3 6
2 5 3 2 1
out:
24
-----------------------------
in:
10
-6
-4 -5
-3 7 5
3 7 -2 1
10 2 -6 2 -6
-8 3 8 6 7 9
-4 -10 0 -3 4 9 2
0 5 5 5 10 -6 -5 -4
-9 7 4 9 8 -5 -2 3 2
-7 -4 0 -10 -8 -4 3 -5 8 9
out:
25
*/







 文章来源地址https://www.toymoban.com/news/detail-699829.html

到了这里,关于王红梅《算法设计与分析(第3版)》部分课后实验代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法设计与分析实验:动态规划与贪心

    目录 一、零钱兑换 1.1 思路一:动态规划 1.2 思路二:贪心 二、安排工作以达到最大效益 2.1 具体思路 2.2 思路呈现 2.3 代码实现 2.4 复杂度分析 2.5 运行结果 三、雇佣k名工人的最低成本 3.1 具体思路 3.2 思路展示 3.3 代码实现 3.4 复杂度分析 3.5 运行结果 结尾语 “生活有意思的

    2024年02月19日
    浏览(77)
  • 算法设计与分析 实验五图论-桥

    一、实验目的: (1)掌握图的连通性。 (2)掌握并查集的基本原理和应用。 二、问题描述: 桥的定义 在图论中,一条边被称为“桥”代表这条边一旦被删除,这张图的连通块数量会增加。等价地说,一条边是一座桥当且仅当这条边不在任何环上。一张图可以有零或多座桥

    2024年02月06日
    浏览(41)
  • 算法设计与分析实验:DFS与BFS

    目录 一、边界着色 1.1 思路一:DFS 1.2 思路二:BFS 二、课程表II 2.1 思路一:DFS 2.2 思路二:拓扑排序 三、岛屿的最大面积 3.1 具体思路 3.2 思路展示 3.3 代码实现 3.4 复杂度分析 3.5 运行结果 2024-1-31 阴 力扣第1034题 (1)具体思路: 首先,定义一个dfs函数,用于搜索和染色连通

    2024年02月21日
    浏览(35)
  • 算法设计与分析—动态规划作业二(头歌实验)

    任务描述 本关任务:计算寻宝人所能带走的宝物的最大价值。 一个寻宝人在沙漠中发现一处神秘的宝藏,宝藏中共有 n 个宝物( n 不超过 20 ),每个宝物的重量不同,价值也不同,宝物 i 的重量是 wi ,其价值为 vi 。 寻宝人所能拿走的宝物的总重量为 m ( m 不超过 50 )。请

    2024年02月06日
    浏览(74)
  • 南邮|算法分析与设计实验二 动态规划法

    目录 实验目的 实验内容 实验步骤 一、最长公共子序列 二、矩阵连乘  加深对动态规划法的算法原理及实现过程的理解,学习用动态规划法解决实际应用中的 最长公共子序列问题 和 矩阵连乘问题 ,体会 动态规划法 和 备忘录方法 的异同。 一、用动态规划法和备忘录方法

    2024年02月01日
    浏览(45)
  • 【算法设计与分析】第七至十一讲实验

    1. 实验题目 给定一个非负整数的数组,每个数字表示在当前位置的基础上最多可以走的步数。求能够到达数组最后一个位置所需的最少移动次数。如果不能到达,则输出-1。 例如:        输入数组 [2,3,1,1,4],输出2——第一步从下标0移动1步到下标1,再移动3步到最后一个位

    2024年02月06日
    浏览(33)
  • 算法设计与分析—动态规划作业一(头歌实验)

    任务描述 本关任务:求一个序列的最长上升子序列。 相关知识 最长上升子序列问题 当一个序列 Bi 满足 B1 B2 ... Bs 的时候,我们称这个序列是 上升 的。对于给定的一个序列 a1, a2, ..., aN ,我们可以在其中找到一些上升的子序列。 现在给你一个序列,请你求出其中 最长 的上

    2024年02月04日
    浏览(137)
  • 编译原理实验三:算符优先分析算法的设计与实现

    实验三 算符优先分析算法的设计与实现 一、 实验目的 根据算符优先分析法,对表达式进行语法分析,使其能够判断一个表达式是否正确。通过算符优先分析方法的实现,加深对自下而上语法分析方法的理解。 二、 实验要求 1、输入文法。可以是如下算术表达式的文法(你

    2024年02月06日
    浏览(57)
  • 中北大学算法分析与设计实验报告六(最大团问题)

    1.实验名称 实验六 回溯与分支限界算法实验 2.实验目的 题目:最大团问题 强化学生利用回溯算法和优化处理实际问题的能力。 3.训练知识点集群 (1)根据实验内容设计算法伪代码进行算法描述; (2)利用C++/C/Java等编程语言对算法伪代码进行工程化实现; (3)输入测试用

    2024年02月06日
    浏览(42)
  • 中北大学算法分析与设计实验报告三(数字旋转方阵)

    1.实验名称 实验三 分治与减治算法实验 2.实验目的 (1)掌握分治法的设计思想; (2)掌握数字旋转方阵的具体实现过程; (3)熟练掌握二维数组的使用方法; (4)在掌握的基础上编程实现数字旋转方阵的实现过程。 3.训练知识点集群 (1)根据实验内容设计算法伪代码

    2023年04月08日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包